Godot EngineUI列表控件:滚动列表与虚拟列表

Godot EngineUI列表控件:滚动列表与虚拟列表

【免费下载链接】godot Godot Engine,一个功能丰富的跨平台2D和3D游戏引擎,提供统一的界面用于创建游戏,并拥有活跃的社区支持和开源性质。 【免费下载链接】godot 项目地址: https://gitcode.com/GitHub_Trending/go/godot

你是否在开发游戏时遇到过UI列表数据量大导致卡顿的问题?是否想让列表在滚动时更加流畅?本文将详细介绍Godot Engine中的两种列表控件——滚动列表(ScrollContainer)与虚拟列表(ItemList),帮助你轻松解决列表展示难题。读完本文,你将了解两种列表的适用场景、实现方式及性能优化技巧,让你的游戏UI交互更加流畅。

Godot Engine UI列表控件概述

Godot Engine作为一款功能丰富的跨平台2D和3D游戏引擎,提供了强大的UI系统。列表控件是UI中常用的元素,用于展示大量数据。Godot中主要有两种列表控件:滚动列表(ScrollContainer)和虚拟列表(ItemList)。

Godot Engine Logo

滚动列表(ScrollContainer)

滚动列表是通过在容器内添加滚动条来实现内容滚动的控件。当内容超过容器可视区域时,会自动显示滚动条,用户可以通过拖动滚动条或鼠标滚轮来查看隐藏内容。

滚动列表的核心实现位于scene/gui/scroll_container.hscene/gui/scroll_container.cpp文件中。它继承自Container类,包含水平和垂直滚动条(HScrollBar和VScrollBar),可以根据内容大小自动调整滚动条的显示状态。

虚拟列表(ItemList)

虚拟列表是一种优化的列表控件,它只渲染可视区域内的项目,而不是所有项目。当列表数据量很大时,虚拟列表可以显著提高性能,减少内存占用和渲染开销。

虚拟列表的核心实现位于scene/gui/item_list.hscene/gui/item_list.cpp文件中。它支持多种选择模式(单选、多选、切换)和图标模式(顶部、左侧),可以灵活配置列表项的外观和行为。

滚动列表的使用

基本结构

滚动列表通常由ScrollContainer和一个子容器(如VBoxContainer或HBoxContainer)组成。子容器用于排列列表项,当子容器的大小超过ScrollContainer的可视区域时,滚动条会自动出现。

extends Control

func _ready():
    # 创建滚动容器
    var scroll_container = ScrollContainer.new()
    scroll_container.size = Vector2(300, 400)
    add_child(scroll_container)
    
    # 创建垂直布局容器
    var vbox = VBoxContainer.new()
    scroll_container.add_child(vbox)
    
    # 添加列表项
    for i in range(50):
        var label = Label.new()
        label.text = "列表项 " + str(i)
        vbox.add_child(label)

滚动模式设置

ScrollContainer提供了多种滚动模式,可以通过set_horizontal_scroll_modeset_vertical_scroll_mode方法进行设置。滚动模式包括:

  • SCROLL_MODE_DISABLED:禁用滚动
  • SCROLL_MODE_AUTO:自动显示(内容超过时显示)
  • SCROLL_MODE_SHOW_ALWAYS:始终显示
  • SCROLL_MODE_SHOW_NEVER:从不显示
  • SCROLL_MODE_RESERVE:保留空间但不显示滚动条
# 设置垂直滚动条始终显示
scroll_container.set_vertical_scroll_mode(ScrollContainer.SCROLL_MODE_SHOW_ALWAYS)

常用属性

ScrollContainer还提供了其他常用属性,如:

  • deadzone:滚动死区大小,控制鼠标拖动开始滚动的阈值
  • follow_focus:是否跟随焦点控件自动滚动
  • scroll_speed:滚动速度

这些属性可以通过代码或编辑器界面进行设置,以满足不同的交互需求。

虚拟列表的使用

基本结构

虚拟列表由ItemList控件实现,它支持大量数据的高效展示。ItemList通过复用列表项视图来减少渲染和内存开销,只创建可视区域内的列表项实例。

extends Control

func _ready():
    # 创建虚拟列表
    var item_list = ItemList.new()
    item_list.size = Vector2(300, 400)
    add_child(item_list)
    
    # 设置选择模式为多选
    item_list.set_select_mode(ItemList.SELECT_MULTI)
    
    # 添加列表项
    for i in range(1000):
        item_list.add_item("项目 " + str(i))

选择模式

ItemList支持三种选择模式,通过set_select_mode方法设置:

  • SELECT_SINGLE:单选模式,只能选择一个项目
  • SELECT_MULTI:多选模式,按住Ctrl键可以选择多个项目
  • SELECT_TOGGLE:切换模式,点击项目可以切换选择状态
# 设置选择模式为切换模式
item_list.set_select_mode(ItemList.SELECT_TOGGLE)

图标模式

ItemList支持在列表项中显示图标,并可以设置图标的位置(顶部或左侧)。通过set_icon_mode方法设置图标模式:

  • ICON_MODE_TOP:图标在文本顶部
  • ICON_MODE_LEFT:图标在文本左侧
# 设置图标模式为左侧
item_list.set_icon_mode(ItemList.ICON_MODE_LEFT)

# 添加带图标的项目
var icon = load("res://icon.png")
item_list.add_item("带图标项目", icon)

滚动列表与虚拟列表的对比

特性滚动列表(ScrollContainer)虚拟列表(ItemList)
数据量适合少量数据(百级)适合大量数据(万级以上)
性能数据量大时性能较差性能优异,只渲染可视区域项目
灵活性可以包含任意控件主要用于文本和图标列表项
内存占用高(创建所有项目)低(只创建可视区域项目)
适用场景简单列表、表单数据表格、排行榜、日志

性能优化技巧

滚动列表优化

  1. 限制列表项数量:如果数据量较大,考虑分页加载或使用虚拟列表
  2. 简化列表项:减少列表项中的复杂控件和嵌套层级
  3. 使用纹理图集:如果列表项包含图标,使用纹理图集减少Draw Call

虚拟列表优化

  1. 设置固定项高:通过set_fixed_column_width方法设置固定的项目高度,提高布局计算效率
  2. 延迟加载数据:只加载可视区域附近的项目数据,减少初始加载时间
  3. 复用列表项:避免频繁创建和销毁列表项,通过更新内容实现复用

总结

滚动列表(ScrollContainer)和虚拟列表(ItemList)是Godot Engine中常用的两种列表控件,各有其适用场景。滚动列表适合展示少量数据,使用简单灵活;虚拟列表适合展示大量数据,性能优异。在实际开发中,应根据数据量和交互需求选择合适的列表控件,并结合性能优化技巧,打造流畅的UI体验。

更多关于列表控件的详细信息,可以参考Godot官方文档:scene/gui/scroll_container.hscene/gui/item_list.h。如果你有任何问题或建议,欢迎在社区论坛分享交流。

希望本文对你理解和使用Godot Engine的列表控件有所帮助!如果你喜欢这篇文章,请点赞、收藏并关注我们,获取更多Godot开发技巧和教程。

【免费下载链接】godot Godot Engine,一个功能丰富的跨平台2D和3D游戏引擎,提供统一的界面用于创建游戏,并拥有活跃的社区支持和开源性质。 【免费下载链接】godot 项目地址: https://gitcode.com/GitHub_Trending/go/godot

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值