Python速成课程第二版练习12-4



有3个文件。rocket_game.py,rocket.py,settings.py。火箭.py的内容。键";向上";箭头不起作用。键";向下";箭头使船向上移动。如果我把最后一行改为";CCD_ 1";,向下的箭头使船向下移动。但为什么游戏不勾上箭头?

def update(self):
"""Update the ship's position based on the moving flag."""
if self.moving_right and self.rect.right < self.screen_rect.right:
self.x += self.settings.ship_speed
elif self.moving_left and self.rect.left > 0:
self.x -= self.settings.ship_speed
if self.moving_up and self.rect.top < self.screen_rect.top:
self.y += self.settings.ship_speed
elif self.moving_down and self.rect.bottom > 0:
self.y -= self.settings.ship_speed

键";向上";箭头不起作用。键";向下";箭头使船向上移动。如果我改变self.y+=self.settings.ship_speed,向下的箭头将船向上移动,我明白为什么。但为什么向上箭头没有?

如果我打印事件,它会看到我按下向上箭头,但火箭不会移动。

另一个问题,上下边界似乎并不存在。

屏幕的左下角分别被描述为坐标0、0。我确实尝试将底部边界设置为0,但飞船仍然在屏幕下方飞行。左右边界工作良好。python编程新手,我尝试阅读rect的pygame API,但它似乎没有我需要的参考。它确实列出了顶部和底部,而不是向上和向下。我在rocket_game.py和rocket.py中尝试了多种方法。

没有错误消息,最终目标是增加在screen_rect边界内上下移动、左右移动的能力。

在pygame坐标系中,顶部左侧坐标为(0,0),底部右侧坐标为(宽度高度)
更改移动方向和防止对象移出屏幕的条件:

if self.moving_up and self.rect.top > 0:
self.y -= self.settings.ship_speed
elif self.moving_down and self.rect.botom < self.screen_rect.bottom:
self.y += self.settings.ship_speed

最新更新