作者:雷蕾
做了那么多的准备工作,现在要来学习如何让游戏玩家(用户)能够左右移动飞船。
驾驶飞船需做的编写代码工作:
(1)响应按键
每当用户按键时,都将在Pygame中注册一个事件。事件是通过方法pygame.event.get()获取的,因此我们需要在方法_check_events()中指定要检查哪些类型的事件,
每次按键都被注册为一个KEYDOWN事件,Pygame检测到KEYDOWN事件时,需要检测按下的键是否是触发行动的键。
def _check_events(self):
'''响应按键和鼠标事件'''
for event in pygame.event.get():
if event.type==pygame.QUIT:
sys.exit()
elif event.type==pygame.KEYDOWN:
if event.key==pygame.K_RIGHT:
#向右移动飞船
self.ship.rect.x+=1
因为要响应按键所以对主程序文件进行更新,主要是在方法_check_events()中添加了一个elif代码块,让pygame在检测到KEYDOWN事件时能够进行响应。
if event.key==pygame.K_RIGHT:
#向右移动飞船
self.ship.rect.x+=1
这个代码块就是检查按下键(event.key)是否是向右箭头键(pygame.K_RIGHT),如果是则将self.ship.rect.centerx的值+1,即飞船图像向右移动。
当再次运行主程序文件时,每按一次向右箭头键,飞船图像将向右移动一步。
(2)允许持续移动
在上述示例中,我们是每按一次向右箭头键,飞船就往右移动一步,那如果希望玩家要是一直不松向右箭头键时,飞船能够不断向右移动,我们该如何编写代码?
import pygame
class Ship:
'''管理飞船的类'''
def __init__(self,ai_game):
'''初始化飞船并设置其初始位置'''
self.screen=ai_game.screen
self.screen_rect=ai_game.screen.get_rect()
#加载飞船图像并获取其外接矩形
self.image=pygame.image.load('images/ship.bmp')
self.rect=self.image.get_rect()
#对于每艘新飞船,都将其放在屏幕底部的中央
self.rect.midbottom=self.screen_rect.midbottom
#移动标志
self.moving_right=False
def update(self):
'''根据移动标志调整飞船的位置'''
if self.moving_right:
self.rect.x+=1
def blitme(self):
'''在指定位置绘制飞船'''
self.screen.blit(self.image,self.rect)
在