🧩 一、为什么说:Lua只有一个数据结构?
如果你只记住一句话:
👉 Lua里没有类、没有真正的数组、没有字典 ------ 只有 Table
但神奇的是:
👉 一个 Table,就能构建整个游戏系统
🚀 二、Table到底是什么?(用游戏视角理解)
Table 本质是:
👉 "键值对集合" + "可动态扩展"
你可以把它理解为:
- ✅ 数组
- ✅ 字典
- ✅ 对象
- ✅ 配置表
👉 全部都是它
🎯 1. 当它是"数组"
lua
arr = {10, 20, 30}
print(arr[1]) -- 10(注意从1开始)
👉 用于:
- 技能列表
- 背包列表
- 卡牌列表
🎯 2. 当它是"字典"
lua
player = {
name = "Hero",
hp = 100
}
👉 用于:
- 角色属性
- 配置数据
- 状态存储
🎯 3. 当它是"对象"
lua
Player = {
hp = 100,
attack = 20
}
function Player:takeDamage(dmg)
self.hp = self.hp - dmg
end
👉 这就是一个"类雏形"
🧠 三、游戏开发中最常见的3种Table用法
🥇 用法1:配置表(策划最爱)
lua
MonsterConfig = {
[1001] = {name = "Goblin", hp = 100, atk = 20},
[1002] = {name = "Orc", hp = 300, atk = 50}
}
👉 特点:
- 不写逻辑
- 全是数据
- 可直接导表(Excel → Lua)
👉 游戏中:
- 怪物配置
- 技能数值
- 关卡数据
🥈 用法2:对象实例(运行时数据)
lua
function createMonster(id)
local cfg = MonsterConfig[id]
return {
id = id,
name = cfg.name,
hp = cfg.hp,
atk = cfg.atk
}
end
👉 配置 ≠ 实例
👉 实例是"运行时对象"
🥉 用法3:系统管理器(Manager)
lua
MonsterManager = {
list = {}
}
function MonsterManager:add(monster)
table.insert(self.list, monster)
end
👉 常见系统:
- UIManager
- AudioManager
- BattleManager
⚠️ 四、pairs 和 ipairs(新手必踩坑)
🔍 pairs(遍历全部)
lua
for k, v in pairs(player) do
print(k, v)
end
👉 遍历:
- 字典
- 不规则表
🔍 ipairs(只遍历数组)
lua
for i, v in ipairs(arr) do
print(i, v)
end
👉 一旦出现 nil 就停止!
❗ 经典坑
lua
arr = {10, 20, nil, 40}
ipairs(arr) --> 只到20就结束
pairs(arr) --> 可以拿到40
👉 游戏开发建议:
✅ 数组用 ipairs
✅ 配置/对象用 pairs
🔥 五、实战:用Table实现一个"卡牌系统雏形"
🧩 1. 卡牌配置表
lua
CardConfig = {
[1] = {name = "火球", damage = 30, cost = 2},
[2] = {name = "治疗", heal = 20, cost = 1}
}
🧩 2. 创建卡牌实例
lua
function createCard(id)
local cfg = CardConfig[id]
return {
id = id,
name = cfg.name,
cost = cfg.cost,
damage = cfg.damage,
heal = cfg.heal
}
end
🧩 3. 使用卡牌
lua
function useCard(card, player, target)
if card.damage then
target.hp = target.hp - card.damage
end
if card.heal then
player.hp = player.hp + card.heal
end
end
👉 这套结构已经是:
🔥 真实商业项目中的基础设计模型
🧠 六、高手和新手的分水岭
❌ 新手写法
lua
player1_hp = 100
player2_hp = 200
👉 无法扩展 ❌
✅ 正确结构
lua
players = {
{
name = "A",
hp = 100
},
{
name = "B",
hp = 200
}
}
👉 数据驱动 ✔
👉 易扩展 ✔
🚀 七、你必须掌握的3个核心能力
1️⃣ 用Table描述一切
👉 人、怪、技能、UI状态
2️⃣ 区分"配置"和"实例"
👉 配置 = 静态
👉 实例 = 动态
3️⃣ 用数据驱动逻辑
👉 不写死逻辑
👉 用数据控制行为
📌 八、本篇总结(一句话带走)
👉 Lua的精髓不是语法,而是:用Table构建整个游戏世界。