Python工程师之Python编程:从入门到实践【3.7】

12.6.3 左右移动

现在飞船能够持续向右移动了,添加向左移动的逻辑也很容易。我们将再次修改Ship 类和方法_check_events() 。下面显示了对Ship 类的方法__init__()和update() 所做的相关修改:

ship.py
def __init__(self, ai_game):
--snip--
# 移动标志
self.moving_right = False
self.moving_left = False
def update(self):
"""根据移动标志调整飞船的位置。"""
if self.moving_right:
self.rect.x += 1
if self.moving_left:
self.rect.x -= 1

在方法__init__() 中,添加标志self.moving_left 。在方法update() 中,添加一个if 代码块而不是elif 代码块,这样如果玩家同时按下了左右箭头 键,将先增加再减少飞船的rect.x 值,即飞船的位置保持不变。如果使用一个 elif 代码块来处理向左移动的情况,右箭头键将始终处于优先地位。从向左移动切换到向右移动时,玩家可能同时按住左右箭头键,此时前面的做法让移动更准 确。 还需对_check_events() 做两方面的调整:

alien_invasion.py
def _check_events(self):
"""响应按键和鼠标事件。"""
for event in pygame.event.get():
--snip--
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
self.ship.moving_right = True
elif event.key == pygame.K_LEFT:
self.ship.moving_left = True
elif event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT:
self.ship.moving_right = False
elif event.key == pygame.K_LEFT:
self.ship.moving_left = False

        如果因玩家按下K_LEFT 键而触发了KEYDOWN 事件,就将moving_left 设置为 True 。如果因玩家松开K_LEFT 而触发了KEYUP 事件,就将moving_left 设置 为False 。这里之所以可以使用elif 代码块,是因为每个事件都只与一个键相关 联。如果玩家同时按下左右箭头键,将检测到两个不同的事件。 如果此时运行alien_invasion.py,将能够持续左右移动飞船。如果同时按下左右箭 头键,飞船将纹丝不动。 下面来进一步优化飞船的移动方式:调整飞船的速度,以及限制飞船的移动距离, 以免其消失在屏幕之外。

12.6.4 调整飞船的速度

        当前,每次执行while 循环时,飞船最多移动1像素,

  • 23
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BinaryStarXin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值