Android游戏开发之SurfaceView动画
2010-09-10 01:09:00 来源:WEB开发网}
public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub
}
}
这里我们有看到了一个新的类SurfaceHolder,我们权且把它当作一个Surface 的控制器,用
它来操作Surface。因为我们现在还不需要直接操作Surface,所以我们不做深入讲解。而唯
一要使用的是SurfaceHolder.addCallback,即为SurfaceHolder 添加回调函数。原因前面我已
经说明了,方法如下:
public GameView(Context context) {
super(context);
// TODO Auto-generated constructor stub
getHolder().addCallback(this);
}
现在我们可以运行一下,跟第一次使用View 一样,界面上什么也没有。因为我们还没有编
写绘图的代码嘛。
前面说过,我们之所以使用SurfaceView 代替View,是因为SurfaceView 可以在主线程之外
的线程中进行绘图操作,从而提高界面的反应速度。下面我们要做的就是创建一个用来绘图
的线程。不过在这之前我们可以先了解一些关于游戏循环的知识:
我们知道,一般的应用程序是用户驱动的,就是用户操作了,程序再来响应。而我们的游戏
呢,不管用户有没有操作,都会有一些变化,最明显的就是npc 会移动、发生世界事件等。
因此,我们可以说,游戏程序在一个无限循环当中,我们就把它叫做游戏循环。那么在游戏
循环中要做哪些工作呢?让我们用一个流程图来说明游戏循环的过程:
获取用户输入
移动主角
移动NPC 和子弹
碰撞检测
产生世界事件
这只是我们假设的流程,不同的游戏肯定会都有些变化。而且细节上会有更多的差别。
了解了游戏循环,下面的工作就是建立一个线程,线程中包含一个游戏循环,在游戏循环中
更新游戏的各种数据,并根据这些数据将游戏画面绘制在Surface 上最终显示给玩家。
创建线程的方法很简单,我们不需要知道Thread 的很多高级特性。只需要知道,在线程中
完成具体的工作需要重载run()函数。线程通过start()函数启动。然后就会执行run()函数中
的内容,run()函数执行结束后线程就会终止。因此我们将游戏循环放在run()函数中。通过
更多精彩
赞助商链接