Android游戏开发之SurfaceView动画
2010-09-10 01:09:00 来源:WEB开发网前面介绍的内容,还是比较简单的,应用这些知识,可以完成一些非实时游戏,比如井字棋
等,或者一些画面刷新不是很频繁、实时性不强的游戏,比如我们前面做的扫雷。但是我们
的目标是坦克大战,对操作的实时性要求比较高,更有很多的NPC 需要处理,绘图的工作
量也很大,所以我们要用一个新的视图类SurfaceView 代替View 来完成显示工作。
SurfaceView 与View 有一些不同,但是我们只用其中的一个特性:在主线程之外的线程中向
屏幕上绘图。这样就可以避免在画图任务繁重的时候造成主线程阻塞,从而提高程序的反应
速度。
首先让我们重新定义一个GameView 类, 让他继承自SurfaceView , 并且要实现
SurfaceHolder.Callback 接口。为什么要实现Callback 接口呢?因为使用SurfaceView 有一个
原则,所有的绘图工作必须得在Surface 被创建之后才能开始(Surface—表面,这个概念在
图形编程中常常被提到。基本上我们可以把它当作显存的一个映射,写入到Surface 的内容
可以被直接复制到显存从而显示出来,这使得显示速度会非常快),而在Surface 被销毁之前
必须结束。所以Callback 中的surfaceCreated 和surfaceDestroyed 就成了绘图处理代码的边界。
我们直接让GameView 类实现Callback 接口,使程序更简洁一些。
GameView 被创建,并补充了构造函数之后就是这个样子(创建类和添加构造函数的方法前
面有介绍哦)
package org.yexing.android.games.tank;
import android.content.Context;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.SurfaceHolder.Callback;
public class GameView extends SurfaceView implements Callback {
public GameView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
public void surfaceCreated(SurfaceHolder arg0) {
// TODO Auto-generated method stub
更多精彩
赞助商链接