【 Godot 4 学习笔记】数组(Array)

在 Godot 4 的 GDScript 中,数组(Array)是最常用、最基础的容器之一,用来存储一系列有序的数据。你可以把它想象成一个可以随意伸缩的"储物柜",里面可以放各种类型的物品。

以下是 Godot 4 中数组的完整使用指南:

📦 数组的创建与初始化

数组用方括号 [] 定义,元素之间用逗号 , 分隔。

gdscript 复制代码
# 1. 创建一个空数组
var my_array = []

# 2. 创建并初始化数组(可以混合存放不同类型的数据)
var inventory = ["宝剑", 50, true, Vector2(10, 20)]

# 3. 静态类型数组(强烈推荐)
# 限制数组只能存放特定类型的数据,能有效避免代码逻辑错误
var scores: Array[int] = 
var names: Array[String] = ["Alice", "Bob"]

🛠️ 常用操作方法

Godot 提供了丰富的内置方法来增删改查数组元素:

方法 说明 示例
append(value) 在数组末尾添加一个元素 arr.append(4)
append_array(array) 将另一个数组的所有元素拼接到当前数组末尾 arr.append_array()
insert(index, value) 在指定索引位置插入一个元素 arr.insert(1, "新元素")
remove_at(index) 删除指定索引位置的元素 arr.remove_at(0)
erase(value) 删除数组中第一个匹配到的指定值 arr.erase("宝剑")
pop_front() / pop_back() 删除并返回数组第一个/最后一个元素 var last = arr.pop_back()
has(value) 检查数组中是否包含某个值 if arr.has(10):
find(value) 返回某个值第一次出现的索引(找不到返回 -1) var index = arr.find(20)
size() 获取数组的长度(元素个数) print(arr.size())
clear() 清空数组中的所有元素 arr.clear()

🔍 访问与修改元素

数组是从 0 开始索引的。你可以像访问普通变量一样读取或修改指定位置的元素。

gdscript 复制代码
var fruits = ["苹果", "香蕉", "橘子"]

# 访问元素
print(fruits)  # 输出: 苹果
print(fruits)  # 输出: 橘子[[source_group_web_2]]

# 修改元素
fruits = "葡萄" 
print(fruits)     # 输出: ["苹果", "葡萄", "橘子"][[source_group_web_3]]

# 负数索引(从后往前数)
print(fruits[-1]) # 输出: 橘子 (最后一个元素)
print(fruits[-2]) # 输出: 葡萄 (倒数第二个元素)

🔄 遍历数组

遍历数组主要有两种常用方式:

1. 直接遍历元素(最常用):

gdscript 复制代码
for fruit in fruits:
    print("水果:", fruit)

2. 通过索引遍历:

gdscript 复制代码
for i in range(fruits.size()):
    print("索引:", i, "元素:", fruits[i])

⚠️ 核心避坑指南:引用传递

这是新手最容易踩的坑!在 Godot 中,数组是引用类型。当你把一个数组赋值给另一个变量时,它们其实指向的是内存中的同一个数组。

gdscript 复制代码
var array_a = 
var array_b = array_a  # 只是复制了引用,没有创建新数组[[source_group_web_4]]

array_b.append(4)      # 修改 array_b
print(array_a)         # 输出:  -> array_a 也被改变了!

解决方案: 如果你需要一个完全独立的副本,必须使用 duplicate() 方法。

gdscript 复制代码
var array_c = array_a.duplicate() # 创建一个真正的副本
array_c.append(5)
print(array_a) # 输出:  -> array_a 不受影响

🚀 进阶:数组的其他实用技巧

  • 排序与打乱

    gdscript 复制代码
    var nums = 
    nums.sort()      # 升序排列 -> 
    nums.shuffle()   # 随机打乱顺序
  • 切片(截取子数组)

    gdscript 复制代码
    var arr = 
    var sub = arr.slice(1, 4) # 截取索引 1 到 3 的元素 -> 
  • 紧缩数组(Packed Arrays)
    如果你需要处理大量单一类型的数据(比如成千上万个坐标点或颜色值),可以使用 Godot 提供的 Packed 系列数组(如 PackedInt32Array, PackedVector2Array 等)。它们比普通数组占用更少的内存,性能更高。

掌握这些基础操作,你就能在 Godot 中灵活地运用数组来处理各种游戏数据了!

相关推荐
艾莉丝努力练剑11 小时前
【AI大模型接入SDK】ChatGPT API
网络·c++·人工智能·websocket·网络协议·学习·chatgpt
andrsted15 小时前
用练题簿小程序 - 让错题不再白错
学习·微信小程序·小程序·学习方法
2601_9499506315 小时前
练题簿,把培训从“走过场”变成“真落地”
人工智能·学习·小程序·刷题·小程序推荐
深圳雨林凯AI18 小时前
图案裂变的“风格归一化“设计思路:主体保得住,画风才拉得齐|雨林凯AI技术笔记
人工智能·笔记
问天_观心19 小时前
大模型微调学习(二)
人工智能·python·深度学习·学习·语言模型·transformer
指掀涛澜天下惊19 小时前
强化学习进阶篇八 策略梯度算法
深度学习·学习·算法·强化学习
star learning white19 小时前
STM32入门学习5
stm32·嵌入式硬件·学习
传奇开心果编程19 小时前
【Rust入门知识点学与练】第4课:条件判断 if / else
开发语言·学习·rust
lifallen20 小时前
Skill 的生命周期:问题消失以后
人工智能·学习·ai·ai编程
千谦阙听20 小时前
C++类和对象(中):默认成员函数、构造与析构、拷贝构造、运算符重载
开发语言·c++·学习