我不能为我的生活弄清楚这一点,但在PyGame中,我试图添加逻辑来重置一个物体失去生命时的位置。但是,当我将对象的位置设置为起始位置变量时,没有任何反应。
这是我到目前为止(当然删节):
#setup of variables, etc
window_size = (1000, 750)
...
start_position = [window_size[0]/2, window_size[1]/2]
...
pac_man = PacMan(start_position, 3, 0, 0)
...
pygame.draw.rect(DISPLAYSURF, red, [pac_man.position[0], pac_man.position[1], 10, 10])
...
#inside the main game while loop
#event handlers
...
pac_man.move()
for ghost in ghosts:
ghost.move(pac_man.position)
if pac_man.position[0] == ghost.position[0] and pac_man.position[1] == ghost.position[1]:
pac_man.lives -= 1
pac_man.position = start_position
#redraw map
DISPLAYSURF.fill(black)
for ghost in ghosts:
pygame.draw.rect(DISPLAYSURF, white, [ghost.position[0], ghost.position[1], 10, 10])
pygame.draw.rect(DISPLAYSURF, red, [pac_man.position[0], pac_man.position[1], 10, 10])
pygame.display.update()
clock.tick(60)
这是pac-man类的样子:
def __init__(self, position, lives, x_speed, y_speed):
self.position = position
self.lives = lives
self.x_speed = x_speed
self.y_speed = y_speed
def move(self):
self.position[0] += self.x_speed
self.position[1] += self.y_speed
def move_to(self, position):
self.position[0] = position[0]
self.position[1] = position[1]
起初我认为这可能是一种竞争条件或某种原因,但根本没有并发性。
我尝试过重置我能想到的位置的每一种排列方式(pac_man.position = start_position,pac_man.position [0] = start_position [0],pac_man.move_to(start_position))
这对我来说非常困惑,因为PacMan使用start_position正确初始化。我想也许这与他在与幽灵一样的步骤中移动的事实有关,但那不可能,因为失去的生命触发得很好(所以它必须进入if声明)。在重绘之后,代码中的任何内容都不会更改pac_man.position的值,只会调用访问器。
目前的行为是,每当PacMan触动一个鬼魂时,他继续朝着原来的方向移动,他会失去一条生命,而幽灵跟在他之后一样。
我错过了什么专业吗?当下一次屏幕重绘发生时,不能改变位置值会影响他的位置吗?即使重绘没有成功,他仍然应该机械地拥有" start_position",对吧?
如果这是一个愚蠢的问题,我道歉。我对python / pygame很新,但我不认为这应该像现在一样令人困惑。我确定我错过了一些大事。
谢谢!