鋼鐵雄心4 GUI教程 P7gridboxType(三)

注:觀前提示,gridboxType與數(shù)組緊密結合,在觀看前請確保你有足夠的有關array的知識

扇形議會原址鏈接:https://github.com/Flaxbeard/hoi4-parliament-diagram
這一P將以TNO最富盛名的扇形議會和滑動條按鈕為例子,完成girdbox最后的補充

前兩期介紹了有關gridbox的工作原理和使用,最后值得一提的是,gridbox所列舉的每個元件,都可以單獨分配effects或者properties,后者可以更改的不止有幀數(shù)/圖像,還有它們的坐標,也就是意味著,你可以通過單獨設置x坐標數(shù)組與y坐標數(shù)組,令gridbox這棟大樓變成任何你需要的形狀

扇形議會:
首先參照P7(二),制作一個8x8規(guī)格的方形議會
先前詳細介紹過,這里就只展示關鍵部分了
素材準備

前端設計


后端編寫



接下來,在properties中,將被列舉的窗口下的iconType關聯(lián)兩個坐標數(shù)組和幀數(shù)數(shù)組
正如之前提過的,gridboxType的一大應用,即批量為相同規(guī)格的元件依據(jù)數(shù)組分配不同的圖像,
更進一步,gridboxType所依據(jù)生成的數(shù)組,為其中列舉的每一個窗口都賦予了其對應在數(shù)組中的位次(index)和數(shù)值(value),并且將這兩個信息儲存在dynamic_lists所定義的臨時變量中(此處規(guī)定index = idx,即idx這個臨時變量)
因此,即使properties中:x,y,frame,關聯(lián)了與gridbox依據(jù)生成的數(shù)組(parliament_seats)所不同的其它數(shù)組(x,y,frame對應的其它數(shù)組),但是依然可以通過臨時變量(idx)來正確地“定位”到gridbox所生成的每個不同窗口

將gridbox高和寬改為100%并且設置slotsize

盡管我們寫了橫向最大為1,但是通過關聯(lián)坐標的數(shù)組,我們依然可以令被列舉的窗口內(nèi)的元件正常顯示
接下來只需要提前寫好每個議席圖標的x,y值,令64個議席圓組成一個扇形就可以了

幀數(shù)數(shù)組同理,素材準備中我們將藍色規(guī)定為第一幀,紅色為第二幀
依據(jù)生成的數(shù)組(parliament_seats)中64個變量值均為1,但是幀數(shù)數(shù)組(array_f_array)為1,2參半,所生成的圖像也將是紅藍參半而不是純藍色

可以看見,64個圖標排布出一個扇形,同時顏色也按照幀數(shù)數(shù)組來顯示

基于上述介紹的,我們只需要排布出x,y數(shù)組就可以將正方形議會改裝成扇形的,圓形的,甚至任意形狀的議會了(當然工作量隨著你席位數(shù)量上升而成指數(shù)級增長就是了)

滑輪按鈕:
注:區(qū)別于P6滑輪,這里介紹的是類似使用滑條增減某個變量,代替傳統(tǒng)的加減號按鈕

基于上文介紹的扇形議會,接下來我們將使用一個滑輪控制64個議席的紅藍占比,
盡管P社提供了scrollbarType,但是很遺憾它并不開放編輯,所以我們需要用一些特殊方式實現(xiàn)滑輪
我們將gridbox關聯(lián)一個含有按鈕(buttonType)的窗口,列舉一個從0到100的按鈕組,然后將它們排列成一個橫行,就可以模擬出滑輪條的效果

素材準備
一個兩幀圖像,第一幀是初始圖像,第二幀是點擊圖像,

一個圓形游標,通過將x坐標與變量關聯(lián)模擬滑塊移動

前端編寫
將slotsize大小改為方形按鈕大小就可以實現(xiàn)橫向的緊密排列,縱向最多1行,橫向為0~100的按鈕組


后端編寫:
首先展開一個數(shù)值從0~100的數(shù)組,并且設置初始狀態(tài)下,游標的x坐標關聯(lián)的變量值

將該數(shù)組與gridbox關聯(lián)

為按鈕分配點擊效果
我們現(xiàn)在得到了0~100的方形按鈕組成的一個滑條,
當我們點擊滑條某一點的時候,查詢該點的按鈕在整個滑條中對應的數(shù)值(v),然后將對應值轉化為比例乘上64,得到紅藍席位數(shù)量,
然后通過先前為議會幀數(shù)關聯(lián)的幀數(shù)數(shù)組(array_f_array)來改變議席的顏色


再補充上游標的x坐標關聯(lián)的變量運算,令每次點擊后游標x更改為滑條對應的位置


理論上整個滑條制作就結束了,但是為了讓滑輪看起來更真實一點,我們再加入左右兩個加減按鈕,讓玩家可以通過按鈕輕微地移動滑塊


進入游戲測試:

附錄1:
通過Python生成x,y坐標數(shù)組
TNO制作組Flaxbeard分享了一個扇形議會的生成器(項目地址:https://github.com/Flaxbeard/hoi4-parliament-diagram)
可以通過它生成對應的x,y坐標數(shù)組,簡化工作量


生成器可以去原項目連接處下載,我也會打包裝進代碼文件放在評論區(qū)
該生成器需要安裝Python 3和Pillow庫
Python 3:?https://www.python.org
Pillow:?https://python-pillow.org

附錄2:
為gridbox生成的buttonType分配點擊幀
這不是一個必須內(nèi)容,但是可能對于制作其它的gridbox提供幫助
我們制作按鈕時特意區(qū)分了兩個幀效果,點擊后的滑條將變更為兩個紅色正方形,與一般按鈕不同,為gridbox生成的按鈕分配點擊幀的時候會面臨無法正確定位的問題

例如:如果使用的是簡單的buttonType而非關聯(lián)gridbox生成的,我們可能會將每個buttonType命名為“button_number”的形式,區(qū)分0~100的按鈕,然后分別寫在properties下寫frame
但是如果使用的gridboxType會出現(xiàn)一個問題,為buttonType分配圖像只能使用被列舉的元件的name,如下

我們需要正確定位到玩家點擊的按鈕是所生成的哪一個,然后只為對應的那個按鈕分配點擊幀,有以下兩個思路:
一、關聯(lián)幀數(shù)數(shù)組:

在點擊按鈕效果下插入一段更新幀數(shù)數(shù)組的effect

可以看見點擊幀可以正確的顯示

二、使用temp variable(臨時變量)
這是一個高級制作手段
注意到臨時變量可以存在于block塊中(effect塊或trigger塊),而visible是實時更新的,即每次更改gridbox時,重新判斷一次
每次點擊gridbox中的組件,都將檢測一次trigger并且設置一個臨時變量,
先前的點擊效果中,我們定義了一個變量(current_int)并且每次點擊時,都將它的值改為關聯(lián)數(shù)組(slider_buttons)中對應變量(slider_buttons^v)的值


每次點擊按鈕時,都會更新一次GUI并且檢測一次trigger,當檢測到某個按鈕被點擊的時候,設置臨時變量為2,其余的按鈕則為1,
由于這個臨時變量只存在于trigger組塊中,因此每個被生成的按鈕都獨立分配點擊幀,而不會互相干擾
檢測按鈕被點擊的trigger原理:當某個按鈕在關聯(lián)數(shù)組中對應的變量值,等于點擊效果設置的這個變量值時,該按鈕即為被點擊的那個



gridbox終于第二次完結了,接下來還會繼續(xù)介紹hoi4-scripted-graphs所使用的樣例,敬請期待