18_外星人游戏项目02——驾驶飞船/小结/

1)响应按键

每当用户按键时,都将在Pygame中注册一个事件。事件都是通过方法pygame.event.get() 获取的,因此在函数check_events() 中,我们需要指定要检查哪些类型的事件。每次按键都
被注册为一个KEYDOWN 事件。
检测到KEYDOWN 事件时,我们需要检查按下的是否是特定的键。例如,如果按下的是右箭头键,我们就增大飞船的rect.centerx 值,将飞船向右移动:
注意空格和制表符的使用
18_外星人游戏项目02——驾驶飞船/小结/
18_外星人游戏项目02——驾驶飞船/小结/

2)允许不断移动

玩家按住右箭头键不放时,我们希望飞船不断地向右移动,直到玩家松开为止。我们将让游戏检测pygame.KEYUP 事件,以便玩家松开右箭头键时我们能够知道这一点;然后,我们将结合使用KEYDOWN 和KEYUP 事件,以及一个名为moving_right 的标志来实现持续移动。
18_外星人游戏项目02——驾驶飞船/小结/
18_外星人游戏项目02——驾驶飞船/小结/
18_外星人游戏项目02——驾驶飞船/小结/

3)左右移动

18_外星人游戏项目02——驾驶飞船/小结/
18_外星人游戏项目02——驾驶飞船/小结/

4)调整飞船的速度

下面来进一步优化飞船的移动方式:调整飞船的速度;限制飞船的移动距离,以免它移到屏幕外面去。
18_外星人游戏项目02——驾驶飞船/小结/
18_外星人游戏项目02——驾驶飞船/小结/
18_外星人游戏项目02——驾驶飞船/小结/

5)限制飞船的活动范围

让飞船到达屏幕边缘后停止移动。为此,我们将修改Ship 类的方法update() :
18_外星人游戏项目02——驾驶飞船/小结/

6)重构check_events()函数:

18_外星人游戏项目02——驾驶飞船/小结/

二,小结

1)Sublime 使用中的制表符和空格的报错解决方案:

https://blog.csdn.net/FengF2017/article/details/79300801#pygame_12
18_外星人游戏项目02——驾驶飞船/小结/
18_外星人游戏项目02——驾驶飞船/小结/

前面一共添加了4个文件:
1,alien_invasion.py:主文件
2,settings.py:设置文件
3,game_functions.py:游戏中的动作函数
4,ship.py:飞船的原始属性
1)alien_invasion.py:

主文件,创建一系列整个游戏都要用到的对象:存储在ai_settings 中的设置、存储在screen 中的主显示surface以及一个飞船例。文件alien_invasion.py还包含游戏的主循环,这是一个调用check_events() 、ship.update() 和update_screen() 的while 循环。
18_外星人游戏项目02——驾驶飞船/小结/

2)settings.py

文件settings.py包含Settings 类,这个类只包含方法__init__() ,它初始化控制游戏外观和飞船速度的属性。
18_外星人游戏项目02——驾驶飞船/小结/

3)game_functions.py

文件game_functions.py包含一系列函数,游戏的大部分工作都是由它们完成的。函数check_events() 检测相关的事件,如按键和松开,并使用辅助函数check_keydown_events() 和check_keyup_events() 来处理这些事件。就目前而言,这些函数管理飞船的移动。模块game_functions 还包含函数update_screen() ,它用于在每次执行主循环时都重绘屏幕。
18_外星人游戏项目02——驾驶飞船/小结/

4)ship.py

文件ship.py包含Ship 类,这个类包含方法__init__() 、管理飞船位置的方法update() 以及在屏幕上绘制飞船的方法blitme() 。表示飞船的图像存储在文件夹images下的文件ship.bmp中。
18_外星人游戏项目02——驾驶飞船/小结/