在Lua中,为什么一个函数或表达式可能在更新调用中多次求值



在Lua工作,我目前有一个功能:

function Entity:damage(dmg)
self.health = self.health - dmg 
end

当我在另一个类的更新函数中调用它时,就像这样:

function Room:update(dt)
if not entity.dead and self.player:collides(entity) then
self.player:damage(1)
end

它不是只造成1点伤害,而是实际上造成了13点伤害,就好像这个函数被多次调用一样,但我不确定为什么会这样?我有非常相似的函数,它们都在做同样的事情,我不确定为什么其中的函数/表达式要被多次求值?

我省略了很多代码,因为我不确定什么与帮助有关。(我使用的是类库,玩家从实体继承(

可以理解的是,缺少了很多代码,我很可能会自己调试它,但如果有人提出可能对我有帮助/引导我朝着某个方向发展的建议,我将不胜感激,我为这个格式不正确的问题道歉。

感谢所有发表评论的人;在你的帮助下,我发现了发生了什么事!

首先,Piglet你是对的——"碰撞"检查状态比1帧长。然而,一旦我解决了这个问题,我仍然注意到我得到了错误的返回值

function Room:update(dt)
if not entity.dead and self.player:collides(entity) then
self.player:damage(1)
end

我认为Alexander,你指出多线程或upvalues是正确的——这有点超出了我的理解范围——但我检查了链接的页面,发现当我将函数调用移到"上游"时,我得到了预期的返回值。

因此,我调用函数的地方可能会导致它被各种类的更新函数多次调用或处理。

感谢您的评论;我会用它们来提高我的提问能力和我的常识:(

最新更新