我正在设计一个游戏,需要将脚本变量从米转换为像素。我的转换系数是 30;30 像素到 1 米。我有三个级别的代码:我的游戏引擎、游戏级别和我的脚本。
游戏引擎从基类创建一个新的游戏关卡“curmap”。游戏中的每一帧,引擎都会调用 curmap.animate,它会返回一个列表,其中列出了游戏中每个对象在何处被 blit'ed。关卡遍历关卡中的每个对象,并在每个对象上调用 animate。
我的问题
我遇到的问题是,在 Level-animate 方法中,player-animate 方法正在返回对 player-class-variables 的直接引用。Level-animate 中的两行注释仅用于更改返回值,但它们正在修改玩家变量。我无法在测试课上重现这一点,所以我完全不知所措。
如何在不更改播放器脚本的情况下取消注释这两个内联乘法语句?
游戏引擎:
# fps is an instance of pygame.time.clock()
# events is a modified list of pygame.event.get()
for item in curmap.animate(fps.tick()/1000, events):
screen.blit(curmap.assets['textures'][item[0]],item[1],item[2])
等级:
def animate(self, timedelta, events):
returns = []
for item in self.objects:
ret = item.animate(timedelta, events)
#ret[1][0] *= 30
#ret[1][1] *= 30
returns.append(ret)
return returns
播放器脚本:
def animate(self, timedelta, input):
# Process Inputs
for item in input['keydown']:
self.keydown.append(item)
for item in input['keyup']:
self.keydown.remove(item)
# Change Velocity and Position
if "left" in self.keydown:
self.velocity[0] = 5
elif 'right' in self.keydown:
self.velocity[0] = -5
else: self.velocity[0] = 0
print(self.position, self.velocity)
self.position[0] += self.velocity[0]*timedelta
self.position[1] += self.velocity[1]*timedelta
# Change Sprite
self.time += timedelta
if self.time > self.altertime:
self.current = (self.current+1)%2
self.time -= self.altertime
return [self.image, self.position, self.sprite[self.current] + self.dimensions]