在下面的代码中,将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
对于来自非脚本语言的人来说,这是一个普遍的误解。请注意,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] 删除。
我来说两句