为什么不更改此对象的位置变量生效?

时间:2016-08-01 00:55:11

标签: python pygame

我不能为我的生活弄清楚这一点,但在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很新,但我不认为这应该像现在一样令人困惑。我确定我错过了一些大事。

谢谢!

0 个答案:

没有答案