ItemListで、インベントリを作る
Disguiseアイテム(Box)の残りの数を示すコンテナGUIを作る
ItemListとは
アイコンを並べるControlアイテム
インベントリの作成に使える
インベントリ = 保管庫、在庫、アイテムポーチ
ThemeにItemListを追加
Add Class Item > ItemList
デフォルトの背景を消す
グレーがかかってるので
Theme > ItemList > bg > 新規StyleBoxEmpty
Itemを追加
エディタ上の、Itemsをクリック
Add Icon > アイコン画像を選択 > 名前を入力
アイコンだけなら、アイテム名は空にする
IconList.Icon プロパティ
リストの要素のIconに関する設定
Mode
Top : 上アイコン、下ラベル、右並び
Left : 左アイコン、右ラベル、上下並び
Scale
大きさ
今回は0.5にしとく
IconList.Columns プロパティ
列に関するプロパティ
Max Columns
GridContainerと同じ
初期値が1なので、増やさないと縦にアイコンが並ぶ
Same Width
幅を揃える
https://gyazo.com/a1a6241714345c914fd1de4425596d53
Scriptを書く
code: ItemList.py
extends ItemList
onready var box_texture = preload("res://Heist-Meisters-Assets/GFX/PNG/Tiles/tile_129.png")
func update_disguises(number):
self.clear()
for i in range(number):
self.add_icon_item(box_texture, false)
メソッド
IconList
clear() : 要素全部けす
add_item(text, texture, selectable=true) : アイテムを追加
add_icon_item(texture, selectable=true) : テキストなしのアイコンのみアイテム追加
プロパティ
icons : 要素のリスト
Selectableについて
Iconのselectableがtrueだと、クリック・タッチできる。
複数選択もできるっぽい
ItemListのItemを選択したときのsignalもある
item_selected(index)
multi_selected(index, selected: bool)
Playerからupdate_disguises( )を呼び出す
disguiseアイテムを使ったらItemListを更新
call_group()を使うのが簡単
1. ItemListを、ItemList groupに登録
ItemListは一般すぎる名詞なので、DisguiseDisplayというNode名に変更、グループ名もそれにする
2. Player.gdを編集
code: Player.py
func _ready():
...
get_tree().call_group("DisguiseDisplay", "update_disguises", disguises)
func disguise():
...
# UI更新
get_tree().call_group("DisguiseDisplay", "update_disguises", disguises)
まとめ
ItemList
インベントリのGUIアイテムを作るのに最適
アイコンのみ、アイコンなしを使い分ける
アイコン + 残り使用回数テキスト という使い方もアリ
Selectable
アイコンにタッチ、クリックしたときシグナルを発生
装備変更、アイテム使用の発火に使える!
get_tree().call_group()
疎結合にNode間で関数呼び出し通信
引数も送れる