在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

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

由于我不确定与帮助有关的内容,因此省略了很多代码。 (我正在使用类库,播放器是从实体继承的)

可以理解的是,很多代码丢失了,我很可能最终自己调试它,但是如果有人提出建议,可能会有所帮助/将我引向某个方向,我将不胜感激,我对此深表歉意。形成的问题。

解决方法

感谢所有发表评论的人;在您的帮助下,我发现了正在发生的事情!

首先,小猪您是正确的-“碰撞”检查状态超过1帧。但是,一旦我解决了这个问题,我仍然注意到我得到了错误的返回值

function Room:update(dt)

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

而且我认为Alexander在指出多线程或升值方面是正确的-这一点超出了我的理解范围-但是我检查了链接的页面,发现当我移动函数调用“上游”时, ,我得到了我期望的返回值。

因此,似乎在我调用该函数的位置导致该函数被各种类的更新函数多次调用或处理。

感谢您的评论;我将使用它们来改善我的提问和我的常识:)