Lua中的玩家状态变量未按预期更新

大卫·加拉格尔

在下面的代码中,将self.player.x的值分配给self.x在初始化时分配,并在进入状态时向左或向右微调。然后,PlayerPilotState在每一帧中操纵self.player.x,我期望self.x会随之更新。实例化播放器时,诸如tilemap之类的项目会作为def.tilemap分配给播放器,但随着地图的更改而更新。我如何确保诸如self.x之类的变量也会自己更新?我知道我可以在每帧更新的情况下更新该变量,但是这似乎是不言而喻的,并且由于我是编码的新手,所以我不理解为什么player.tilemap会更新而该变量不会更新。谢谢!

function PlayerPilotState:init(pilot, passenger)
    self.player = pilot
    self.passenger = passenger
    self.animation = Animation {
        frames = {2, 3, 2, 8},
        interval = 0.1
    }
    self.player.currentAnimation = self.animation
    
    -- x value at middle of players to make collisions more readable
    -- and scalable (for left/right pilot/passenger cases)
    self.x = self.player.x
end

function PlayerPilotState:enter(params)
    -- determine which side passenger is riding on 
    self.ridingSide = params.ridingSide
    if self.ridingSide == 'left' then
        self.x = self.player.x - 1/2 * self.player.width
    else
        self.x = self.player.x + 1/2 * self.player.width
    end
end
2D引擎

对于来自非脚本语言的人来说,这是一个普遍的误解。请注意,self.x和self.player.x是数字,因此在使用分配时:

assert(type(self.player.x) == "number")
self.x = self.player.x -- copy

您正在复制该号码。另一方面,在处理表或用户数据对象时,分配通过引用来起作用:

assert(type(self.player) == "table")
self.ref = self.player -- reference

通常来说,您无法真正按照描述的方式同步一个数字。这也不是有效的,因为您将不得不在内存中对该值进行冗余的“复制”。

这是封装以及数据存储方式/存储位置的问题。如果您不确定如何重新设计代码,请记住“值一起改变,就属于一起”。祝好运!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

什么是joomla中的状态变量

来自分类Dev

如何在React中更新数组中的状态变量?

来自分类Dev

迭代状态变量

来自分类Dev

反应this.setState不更新数组状态变量

来自分类Dev

固体合同的状态变量无法通过JavaScript更新

来自分类Dev

从useCallback访问状态变量时,值不会更新

来自分类Dev

用JSON数据反应更新状态变量

来自分类Dev

从 SharedPreferences 获取数据后状态变量未更新

来自分类Dev

使用状态变量更新计算属性

来自分类Dev

错误:setState(...):使用状态变量的对象进行更新或返回状态变量的对象的函数

来自分类Dev

Polymer中的私有状态变量

来自分类Dev

如何在StyleSheet中访问状态变量?

来自分类Dev

如何在Keras中重置状态变量?

来自分类Dev

当更新它们基于的状态变量时,为什么这些表行在React中不重新呈现?

来自分类Dev

如何使状态变量线程安全

来自分类Dev

cakephp,链接以获取状态变量

来自分类Dev

保持对React状态变量的“引用”

来自分类Dev

状态变量和ForEach Swift

来自分类Dev

观察绑定或状态变量

来自分类Dev

状态变量未呈现

来自分类Dev

如何使状态变量线程安全

来自分类Dev

没有状态变量的动作

来自分类Dev

ReactJS-当状态变量为数字时,SetState不会更新状态

来自分类Dev

状态更改时从状态变量更新数据库

来自分类Dev

变量未按预期更新

来自分类Dev

为什么状态变量不能由上下文变量更新?

来自分类Dev

在AG网格回调中使用状态变量不更新

来自分类Dev

函数未使用挂钩指向状态变量的更新值

来自分类Dev

React组件将状态变量作为参数,未在更新时呈现