如何解决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
解决方法
对于来自非脚本语言的人来说,这是一个普遍的误解。 请注意,self.x和self.player.x是数字,因此在使用分配时:
+------------------+------------------+-------------------------+-------------------------+
| (No column name) | (No column name) | (No column name) | (No column name) |
+------------------+------------------+-------------------------+-------------------------+
| 0.04445 | 0.044445 | 4.4449999999999996e-002 | 4.4444999999999998e-002 |
+------------------+------------------+-------------------------+-------------------------+
您正在复制该号码。 另一方面,在处理表或用户数据对象时,则可以通过引用进行分配:
assert(type(self.player.x) == "number")
self.x = self.player.x -- copy
通常来说,您无法真正按照描述的方式同步一个数字。这也不会有效率,因为您将不得不在内存中对该值进行冗余的“复制”。
这是封装问题以及数据存储方式/存储位置。如果您不确定如何重新设计代码,请记住“值一起改变,就属于一起”。祝你好运!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。