从零开始Android游戏编程(第二版) 第十章 游戏循环的设计

原创 2011年01月14日 16:34:00

第十章 游戏循环的设计

前面的几章中,曾多次提到游戏循环,这一章就让我们一起了解游戏循环的相关概念,学习如何使用游戏循环。

我们知道,游戏的主体通常在一个循环体中,最初,我们用一个变量来表示游戏的状态,比如

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是哪一个了

现在让我们运行一下这个程序,点击屏幕,可以看到两个场景之间切换的效果。到此为止,本章的内容就讲完了,很短是吧,但是很有用,有了这个结构,加上前一章的生命周期控制,你的程序会变得更整洁有序。当然,在具体应用中,你必须扩充scene的内容,比如场景之间的交互,你可能需要一个或几个setter或者Map结构(模仿Activity)。请保持场景之间传递的是数值而不是实例,是设定给演员的指令而不是演员本身。

本章示例程序http://u.115.com/file/f1cf493609

Android编程权威指南(第二版)学习笔记(十)—— 第10章 使用 fragment argument

本章主要介绍了如何使用 fragment 的 arguments 来传递信息
  • kniost
  • kniost
  • 2016年10月21日 11:07
  • 556

【读书笔记《Android游戏编程之从零开始》】9.游戏开发基础(如何快速的进入 Android 游戏开发)

1.不可盲目看API文档 很多人在接触学习一门新的平台语言时,总喜欢先去探究一番API文档。先不说成效如何,至少编者认为这种方式不适合大部分人来效仿,主要原因在于 API 领域广泛,牵涉到的知识点太...
  • dddxxxx
  • dddxxxx
  • 2016年09月09日 10:53
  • 718

深入理解计算机系统(第二版) 家庭作业 第十章

10.6 输出 fd2 = 4  已经有0 1 2被打开,fd1是3,fd2是4,关闭fd2之后再打开,还是4。 10.7 int main(int argc, char **argv...
  • zhanyu1990
  • zhanyu1990
  • 2014年01月21日 13:20
  • 1573

从零开始Android游戏编程(第二版)

没想到重新打开这篇文档已经是一年之后了。去年三月,我停止了这一系列文章的写作。六月,离开了工作了五年的公司。作为公司的创始人和业务主管,我不能容忍它发展的如此缓慢,而合伙人却很享受这种慢节奏的生活。九...
  • yexing
  • yexing
  • 2011年01月14日 17:20
  • 7399

《Android游戏编程之从零开始》笔记

一、游戏开发基础 1.快速进入android游戏开发 自学、demo、问题、百度&Google 2.游戏简单概括 View Canvas Paint 刷新 3.游戏开发常用三种视图...
  • languobeibei
  • languobeibei
  • 2017年12月21日 11:32
  • 569

Android编程权威指南(第2版)—第10章挑战练习

10.5 挑战练习:实现高效的RecyclerView刷新 其实10.4里面已经介绍了通过fragment获取返回结果的方法 (1)在CrimeListFragment.java里面增加相应代码,只贴...
  • wubinyu
  • wubinyu
  • 2017年08月22日 16:26
  • 367

【浅墨著作】《逐梦旅程:Windows游戏编程之从零开始》勘误&配套源代码下载

All our dreams can come true, if we have thecourage to pursue them. 我们所有的梦想都可以成真,只要我们有勇气去追求它们。 ...
  • zhmxy555
  • zhmxy555
  • 2013年10月21日 00:23
  • 93010

java语言程序设计第十章课后题Triangle2D

有错误或者可以改进的地方欢迎大家指正public class Triangle2D{ private MyPoint p1,p2,p3; public Triangle2D(){ ...
  • qq_40865682
  • qq_40865682
  • 2017年11月18日 17:26
  • 132

电子设计从零开始_第二版(1)

这本书的序写的很好,减轻了我的思想压力,说是零基础的人,甚至高中生都能看懂,幽默风趣,言简意赅,插图丰富,希望果真如此。   书里推荐三本书《电路设计与仿真--基于Multisim 8 与Prote...
  • u012296694
  • u012296694
  • 2014年03月10日 14:36
  • 766

Python 第二版答案详解全集

这是我学习 python(第二版)过程中,整理的每章节的答案,希望可以一起学习和进步。 第一章就不多说了,了解 python,答案从第二章开始。1.python(第二版)第二章答案 2. pyth...
  • MTbaby
  • MTbaby
  • 2016年10月26日 18:54
  • 1175
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从零开始Android游戏编程(第二版) 第十章 游戏循环的设计
举报原因:
原因补充:

(最多只允许输入30个字)