- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第10章游戏循环的设计
第十章 游戏循环的设计
前面的几章中,曾多次提到游戏循环,这一章就让我们一起了解游戏循环的相关概念,学习如何使用游戏循环。
我们知道,游戏的主体通常在一个循环体中,最初,我们用一个变量来表示游戏的状态,比如
gameState = STATE_STARTMENU;
每 次循环都判断当前状态,调用不同的函数进行处理。这种方法简单有效,所有的逻辑代码都在一个类里,不必考虑隐藏和划分,只需要定义一些函数即可。但是它的 优点也是它的缺点,这种结构化的方法通常让程序显得很大,有些混乱。所以我们采用另一种方式管理游戏循环,将场景(Scene)的概念引入程序中。
我 们可以认为一个游戏由一些独立的场景组成,如开始菜单,游戏中画面,过关画面等等都可以是场景,而整个游戏就在这些场景之间不断切换,直到退出为止。场景 这个词用在这里非常贴切,所有游戏的元素,不论是选项菜单还是玩家角色,都像是舞台上的演员(Actor),他们根据不同的场景登上舞台或离开舞台。有了 场景的支持,演员们不再挤在一起,而是被划分成一组一组的,彼此隔离,这样会让程序变得清晰有序,而游戏循环就变成了场景循环。
我们首先创建一个SceneBase类,作为所有Scene的基类:
public abstract class SceneBase {
abstract public void tick();
abstract public void update(Canvas c);
}
其中tick为一个动画帧,让所有演员做出动作。update将演员们显示在舞台上。
然后,我们在GameView建立一个SceneBase类型的变量来表示当前的场景,只有当前的场景才会被绘制。
static SceneBase currentScene;
……
if(c != null) {
currentScene.tick();
currentScene.update(c);
}
最后通过一个函数改变当前场景,这就实现了最基本场景转换。
public static void setCurrentScene(SceneBase scene) {
currentScene = scene;
}
为了测试这种方案,我们创建两个场景类SceneStartMenu和SceneMain分别表示开始菜单和游戏主循环,通过点击屏幕在这两个场景之间切换。
我们首先在GameView中定义这两个场景
static SceneStartMenu sceneStartMenu = null;
static SceneMain sceneMain = null;
在GameView的构造函数中初始化sceneStartMenu,将它作为初始场景
if(sceneStartMenu == null)
sceneStartMenu = new SceneStartMenu();
setCurrentScene(sceneStartMenu);
然后我们在GameView中重载onTouchEvent(也要为SceneBase增加一个响应的函数)
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
return currentScene.onTouchEvent(event);
}
在SceneStartMenu中
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
if(GameView.sceneMain == null)
GameView.sceneMain = new SceneMain();
GameView.setCurrentScene(GameView.sceneMain);
break;
}
return true;
}
SceneMain与之相反即可
然后我们修改两个scene的update函数
public void update(Canvas c) {
// TODO Auto-generated method stub
c.drawARGB(255, 0, 0, 0);
c.drawText(SceneStartMenu, GameView.width/2, GameView.height/2, paint);
}
这样就能知道当前的Scene是哪一个了
现 在让我们运行一下这个程序,点击屏幕,可以看到两个场景之间切换的效果。到此为止,本章的内
您可能关注的文档
- 立体几何公理与理论的梳理.doc
- 立体几何推理和定理.doc
- 立体图形与其表示方法.doc
- 窗帘搭配攻略3︰窗帘搭配的基础常识.docx
- 窦晓杰自闭症的简介和辅导策略.doc
- 立及实施质量管理体系可以分为以下8个步骤.doc
- 立式罐使用作业指教书学习讲训备案.doc
- 立加利仙〔苯溴马隆片〕.doc
- 立思辰互联网留学︰道格拉斯学院大学入学要求.doc
- 窗边小豆豆读书报告.doc
- 2025年中山市沙溪镇人民政府所属事业单位招聘11人笔试备考题库及参考答案详解一套.docx
- 2025年中山市横栏镇人民政府所属事业单位第二期招聘笔试高频难、易错点备考题库及参考答案详解一套.docx
- 2025年中山市横栏镇人民政府所属事业单位第二期招聘笔试高频难、易错点备考题库含答案详解.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试高频难、易错点备考题库及完整答案详解1套.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试高频难、易错点备考题库参考答案详解.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试备考题库附答案详解.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试高频难、易错点备考题库附答案详解.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试备考题库附答案详解.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试备考题库及答案详解一套.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试备考题库及完整答案详解1套.docx
文档评论(0)