问题描述
我目前正在从事《 Python崩溃课程》一书中的Alien Invasion项目。问题是,每当我按向右箭头键(我暂时删除了向左箭头键的代码)时,我的船的图像都没有动。
我知道我的用于检查按键事件的函数可以正常工作,因为无论何时按下按键或不按下按键,它都会打印出期望值。
按下时,标志movingRight
从其默认状态false更改为true。然后应该发生的是,通过向变量“中心”添加预定的运动因子来更改变量,然后使用该变量将船图像打印到新位置。
但是,当我在movingRight
文件中打印ship.py
的状态时,它表明movingRight
仍然是False
,即使在KEY_DOWN
事件期间也是如此。
这是处理事件并更改飞船状态的循环。该文件位于名为alien_invasion.py
的主文件中:
#Create a new Ship
ship = Ship(aiSettings,screen)
#start the main loop for the game
while True:
#Check for events that affect the ship
gf.checkEvents(ship)
#Update the status of the ship based upon checkEvents()
ship.update()
#Update the screen after pulling data from ship.update()
gf.updateScreen(aiSettings,screen,ship)
下面是名为checkEvents()
的单独文件中的game_functions.py
函数:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
print("Moving Right")
ship.moveRight = True
elif event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT:
print("Done moving right")
ship.moveRight = False
最后,下面是编辑飞船位置的代码。这是在ship.py
内:
def update(self):
print("movingRight state is: " + self.movingRight) #movingRight is false during KEY_DOWN event
#Check for a right move
if self.movingRight:
#Update the ship's center to the right x amount of pixels
self.center += self.aiSettings.shipSpeedFactor
self.rect.centerx = self.center
我知道这本书已经有几年历史了,难道我使用的方法已经过时了吗?
解决方法
根据我在代码中看到的内容,看起来您正在为右移变量使用不同的名称。在第二个代码片段中,将ship.moveRight设置为True,但是在第三个代码片段中,您正在检查self.movingRight是否为True。尝试更改它,以便都使用.movingRight或都使用.moveRight