微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Lua中,为什么函数或表达式在更新调用中会多次评估?

如何解决在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在指出多线程或升值方面是正确的-这一点超出了我的理解范围-但是我检查了链接的页面,发现当我移动函数调用“上游”时, ,我得到了我期望的返回值。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。