为什么要封装?
pygame写起游戏都是函数式编写,对于一些简单的小游戏或许可以应付,随着游戏内容的增加,我们不可能只在一个.py文件中写下所有的游戏代码,这个时候,我们应该考虑对游戏中组件及对象进行封装,用面向对象的方式来进行游戏代码的编写。
一些具体的封装内容
游戏中的关键词,假设游戏没有条件判断,那么游戏从头运行到尾就是一部电影。 这样的话,我们定义一些游戏的基本对象:
- 渲染器(APP)--只负责渲染游戏场景中存在的游戏片段,属性有:一个游戏片段容器及一些游戏窗口常用设置,并初始化游戏设置。
- 游戏片段(scene)--可能是游戏中的一个片段,一个情节,一节过场,片头,片尾等,游戏片段中包含一个开关属性,用来控制是否可以渲染此游戏片段。
- 游戏逻辑判断器--游戏中的裁判,负责判断修改游戏中的执行条件。
- 精灵--游戏中的角色,他可以是游戏中的场景,主角,配角,怪物,子弹,文字对白。
- 工具类包括:场景中文字渲染工具,游戏中的素材目录的定制,方便调用。一些其它可能需要重复使用的工具。
定义渲染器
渲染器定义为一个游戏的APP,他应该是这个游戏的最外层,可以定义他的,分辨率,标题,刷新频率。 如果游戏中有精灵贯穿全局(比如RPG游戏中的主要角色),这种精灵角色他不属于某个游戏片段,这样他应该存在于这个游戏app中。
定义游戏片段
一个gameApp中,至少得有一个游戏片段,游戏片段包括三个主要方法:
draw() update() handle_event()
这三个方法分别对应:
- 渲染场景
- 更新数据
- 事件处理
当我们继承新建游戏片段类的时候,需要根据自己的需求重写这三个方法。
如何使用PY_RPG?
app = GameApp()#创建游戏
appscreen = app.screen#获取渲染器
app.scenes.append(MainScene(appscreen))#创建游戏菜单
app.scenes.append(TestScene(appscreen))#创建游戏内容
app.scenes.append(GameOverScene(appscreen))#游戏结束画面
app.run() #游戏开始
根据需要创建并重写上边的三个类,然后创建游戏就可以了,现在这样看来,游戏的创建是不是很有层次了?
这个框架还没有封装完毕,我还会继续的,之后的游戏制作都要从这个框架上弄起了,初步还要写几个完整的小游戏例子。
以下为游戏效果图,建议下载相关代码跑一下,有问题可以留言给我。
本文源码下载
请git clone My_pygame下所有代码,以免造成游戏跑不起来的情况。本例源文件在PY_RPG目录下