物品列表
支持多选的 ItemList,可以移除选中的行,也可以再放回去。
上方的编辑器正在运行这个项目。改一行代码,它就会重新加载。
用到的 Godot 类
ItemListButton
代码
scripts/main.gd
extends Node
const ITEMS: Array = ['iron sword', 'wooden shield', 'health potion', 'mana potion', 'rope', 'torch', 'old map', 'silver key']
var list: ItemList
var status: Label
func _ready() -> void:
var column: VBoxContainer = _root()
var title: Label = Label.new()
title.text = 'ItemList inventory'
title.add_theme_font_size_override('font_size', 26)
column.add_child(title)
list = ItemList.new()
list.select_mode = ItemList.SELECT_MULTI
list.custom_minimum_size = Vector2(420, 320)
list.multi_selected.connect(func(_index: int, _selected: bool): _update())
column.add_child(list)
for item in ITEMS:
list.add_item(item)
var row: HBoxContainer = HBoxContainer.new()
row.add_theme_constant_override('separation', 12)
column.add_child(row)
var drop: Button = Button.new()
drop.text = 'drop selected'
drop.pressed.connect(_drop_selected)
row.add_child(drop)
var restore: Button = Button.new()
restore.text = 'restore'
restore.pressed.connect(_restore)
row.add_child(restore)
status = Label.new()
status.add_theme_color_override('font_color', Color('#999999'))
column.add_child(status)
_update()
func _drop_selected() -> void:
var selected: PackedInt32Array = list.get_selected_items()
for i in range(selected.size() - 1, -1, -1):
list.remove_item(selected[i])
_update()
func _restore() -> void:
list.clear()
for item in ITEMS:
list.add_item(item)
_update()
func _update() -> void:
status.text = '%d items, %d selected (ctrl click for more)' % [list.item_count, list.get_selected_items().size()]
func _root() -> VBoxContainer:
var background: ColorRect = ColorRect.new()
background.color = Color('#12141a')
add_child(background)
background.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
var center: CenterContainer = CenterContainer.new()
add_child(center)
center.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
var column: VBoxContainer = VBoxContainer.new()
column.add_theme_constant_override('separation', 16)
center.add_child(column)
return column