リストダイアログのスクリプトの作成
ListDialogシーンのスクリプトの作成
いよいよリストダイアログの本体のスクリプトです。
list_dialog.tscnを開いて、ルートの「ListDialog」ノードにスクリプトをアタッチします。
「ListDialog」ノードを右クリックして「スクリプトをアタッチ」を選択します。「ノードにスクリプトをアタッチする」ダイアログが表示されますので「テンプレート」にチェックを入れて、そのまま「作成」ボタンを押します。
res://scn/list_dialog/list_dialog.gdと保存されたはずです。
list_dialog.gdをScriptビューで開いて、次のように書き換えます。
extends CanvasLayer
class_name ListDialog
signal selected(id: int)
var list_item_2_row = preload("./list_item_2_row.tscn")
func _ready() -> void:
var i = {"title": "title", "desc": "description"}
init("ダイアログタイトル", [i, i, i, i, i, i, i, i, i])
selected.connect(func(x): print(x))
# 初期化
func init(title: String, menus: Array) -> void:
%Title.text = title
var vbox = %VBoxContainer
# 追加
for i in menus.size():
var menu = menus[i]
var item = list_item_2_row.instantiate()
item.set_info_ex(i, menu["title"], menu["desc"])
vbox.add_child(item)
item.item_pressed.connect(selected.emit)
スクリプトの解説
まず、冒頭部分を解説します。
リストダイアログは、他の場所から呼び出す予定ですので、クラス名としてListDialogを設定します。
class_name ListDialog
また、呼び出し元に選択したリスト番号を返すために、シグナルselected(id: int)を定義します。
signal selected(id: int)
リストアイテムとして「ListItem2Row」を使いますので、preload関数で読み込み、変数list_item_2_rowに部品として代入しておきます。
var list_item_2_row = preload("./list_item_2_row.tscn")
次にinit関数を見ていきます。
まずは冒頭部分です。
%Title.text = title var vbox = %VBoxContainer
固有名アクセスを設定した「Title」ノードのtextに、タイトルのテキストを設定します。そして、「VBoxContainer」を、変数vboxでアクセス可能にします。
次は中盤以降です。
# 追加 for i in menus.size(): var menu = menus[i] var item = list_item_2_row.instantiate() item.set_info_ex(i, menu["title"], menu["desc"]) vbox.add_child(item) item.item_pressed.connect(selected.emit)
引数の配列menusに従い、リストを構築していきます。list_item_2_rowをインスタンス化して、「ID」「タイトル」「説明」を設定して、vboxの子ノードとして追加します。
また、リストアイテムのitem_pressedシグナルと、自身のselectedシグナルを接続して、値を受け取れるようにします。
最後に_ready関数を見ていきます。
func _ready() -> void:
var i = {"title": "title", "desc": "description"}
init("ダイアログタイトル", [i, i, i, i, i, i, i, i, i])
selected.connect(func(x): print(x))
先ほどのinit関数を利用してダイアログを開きます。そしてselectedシグナルと匿名関数を接続します。匿名関数ではクリックした要素の番号を得て出力します。
実行確認
ここまでのスクリプトを実行します。
list_dialog.tscnを開いた状態で、「F6」を押すか、画面右上の「カチンコの中に▶のアイコン」
(現在のシーンを実行)ボタンを押します。
リストダイアログが表示されます。各項目をクリックすると、その番号が出力されます。マウスのホイールでリストをスクロールできることも確認してください。
