Python学习的第二十四天(总结之前飞机大战的操作)
一 游戏循环外,初始化相关对象
创建屏幕对象
- 创建屏幕对象
创建背景图片对象
- 背景图片
创建游戏角色图片对象
- 我方飞机
创建时钟对象
二 游戏循环内,游戏的主逻辑
先修改图片对象的坐标
如何修改图片对象的坐标了
当前的图片对象象,把坐标,保存在了一个矩形对象中
通过矩形对象.x
可以得到x坐标数据
如果 矩形对象.x = n
就可以修改数据
坐标怎么修改?
这需要根据需求了
可按照情况来处理坐标的修改
1,自动情况
例如,敌方飞机,由最上方向最下方移动。 因此,敌机的坐标会是由y坐标的0一直到y坐标的最大值(屏幕的最大高度)
2,手动情况
例如,我方飞机,坐标根据玩家的键盘事件来决定。点击左方向键,x坐标越来越小。 点击右方向键,x坐标越来越大。
绘制图象
屏幕对象.blit(图片对象, (对应的矩形对象.x, 对应矩形对象.y )))
屏幕对象.blit(图片对象2, 坐标元组)
屏幕对象.blit(图片对象3, 坐标元组)
pygame.display.update()
时钟对象控制帧率
时钟对象.tick(帧率)
三 基础知识
绘图三步曲
- 读取图片,得到图片对象
- 屏幕加载图片
- 更新显示
项目继续。。。。
派生敌机类
对象.属性 拿值
对象.属性 = 新值 来赋值
e = EnemyPlan('./images/enemy1.png', 2)
主程序中创建敌机对象与敌机组对象
enemy = tool.EnemyPlan('./images/enemy1.png', 2)
enemy_group = pygame.sprite.Group(enemy)
在循环中调用敌机组对象的update方法
enemy_group.update()
敌机组成员中的每一个敌机对象都会调用各自的update方法
补写了一个敌机类中的update方法
class EnemyPlan(GameSprite): # object
"""敌机类"""
def __init__(self, i, s):
super().__init__(i,s)
self.rect.x = 0
self.rect.y = 0
def update(self, *args):
self.rect.y += self.speed
在游戏循环中
# 绘制敌机
enemy_group.update()
enemy_group.draw(screen)