gpt4 book ai didi

类和模块以及 Lua,哦,我的

转载 作者:行者123 更新时间:2023-12-01 00:41:19 25 4
gpt4 key购买 nike

我正在 Lua 中开发一款游戏,到目前为止,我已经在一个文档中处理了所有内容。但是,为了更好地组织所有内容,我决定将其扩展为模块,虽然我认为我可能会使其工作或多或少相同,但我认为现在可能是一个让事情变得更加清晰和优雅的机会。

一个例子是敌人和敌人的运动。我有一个名为enemyTable 的数组,下面是Update 中移动每个敌人的代码:

    for i, bat in ipairs(enemyTable) do
if bat.velocity < 1.1 * player.maxSpeed * pxPerMeter then
bat.velocity = bat.velocity + 1.1 * player.maxSpeed * pxPerMeter * globalDelta / 10
end

tempX,tempY = math.normalize(player.x - bat.x,player.y - bat.y)

bat.vectorX = (1 - .2) * bat.vectorX + (.2) * tempX
bat.vectorY = (1 - .2) * bat.vectorY + (.2) * tempY

bat.x = bat.x + (bat.velocity*bat.vectorX - player.velocity.x) * globalDelta
bat.y = bat.y + bat.velocity * bat.vectorY * globalDelta

if bat.x < 0 then
table.remove(enemyTable,i)
elseif bat.x > windowWidth then
table.remove(enemyTable,i)
end
end

这段代码做了我想做的一切,但现在我想把它移到一个名为enemy.lua的模块中。我最初的计划是在enemy.lua 中创建一个函数enemy.Move() 来做这件事,然后返回更新的enemyTable。那么 main.lua 中的代码将类似于:
enemyTable = enemy.Move(enemyTable)

我更喜欢的是:
enemyTable.Move()

...但我不确定在 Lua 中是否有任何方法可以做到这一点?有没有人对如何做到这一点有任何建议?

最佳答案

听起来你只想要 metatableenemyTable成为enemy模块表。 Lua 5.1 reference manual entry for metatables

像这样的东西。

敌人.lua

local enemy = {}

function enemy:move()
for _, bat in ipairs(self) do
....
end
end

return enemy

主程序.lua
local enemy = require("enemy")

enemyTable = setmetatable({}, {__index = enemy})

table.insert(enemyTable, enemy.new())
table.insert(enemyTable, enemy.new())
table.insert(enemyTable, enemy.new())

enemyTable:move()

关于类和模块以及 Lua,哦,我的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37598825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com