gpt4 book ai didi

python - 如何在不更改类变量的情况下编辑函数的返回值

转载 作者:行者123 更新时间:2023-12-01 05:50:15 24 4
gpt4 key购买 nike

我正在设计一个游戏,需要将脚本变量从米转换为像素。我的换算系数是30; 30 像素至 1 米。我有三个级别的代码:我的游戏引擎、游戏级别和我的脚本。

游戏引擎从基类创建一个新的游戏关卡“curmap”。游戏中的每一帧,引擎都会调用 curmap.animate,它返回游戏中每个对象被 blit'ed 的位置的列表。关卡迭代关卡内的每个对象,并对每个对象调用 animate。

我的问题

我遇到的问题是,在 Level-animate 方法中,player-animate 方法返回对玩家类变量的直接引用。 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]

最佳答案

您没有说明 Player.animate 方法中的 self.position 到底是什么,但如果它是一个包含数值的简单列表,只需复制此列表:

return [self.image, self.position[:], self.sprite[self.current] + self.dimensions]
<小时/>

您正在返回列表Player.position,当您在Level.animate中更改它(更改列表内的值)时,您实际上正在更改Player.position,因为您正在处理同一个列表。

关于python - 如何在不更改类变量的情况下编辑函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14555117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com