android小游戏制作心得(四)——GameView的实现

版权所有。所有权利保留。

欢迎转载,转载时请注明出处:

http://blog.csdn.net/xiaofei_it

GameView实现游戏界面,是最重要的类。

几乎所有游戏变量在GameView的构造函数中初始化。

GameView的resume函数是关键。这里要根据当前状态,进行相应的操作。如果有的状态要取相应的SharedPreferences里的数据来判断之前游戏是正常终止还是由于来电话之类的事件导致终止,那么该函数还要读取SharedPreferences数据,如果有相应的进度保存,就说明是非正常终止,那么就要恢复到之前的样子,并且要清除SharedPreferences里相应的数据。如果是正常终止,那么可以用默认的初始值对数据进行初始化。

线程的开始都要放在resume里。

GameView的pause函数也和上面类似。如果是非正常终止,就要在SharedPreferences里保存相应的数据。线程的终止也要放在这里。

下面的GameView同时实现CallBack接口,这个纯粹是为了代码简洁,没别的意思。


public class GameView extends SurfaceView implements Callback {
	//这里的私有变量主要是各个线程以及游戏变量,比如得分之类的。
	private MyTimer drawThread;//画图线程
	private MyTimer produceThread;//产生游戏物体的线程
	private MyTimer timerThread;//计时器线程
	private MyTimer moveThread;//移动物体的线程
	private World world;//游戏世界变量,这个以后介绍
	public GameView(Context context) {
		super(context);
		getHolder().addCallback(this);
		//所有私有变量要在这里初始化。
		drawThread=new MyTimer(new TimerTask()
		{
			public void run()
			{
				draw();
			}
		},Const.getInstance().sleepPeriod);
		moveThread=new MyTimer(new TimerTask()
		{
			public void run()
			{
				if (StateMachine.getInstance().getCurrentState()!=State.gameMode)
					return;
				world.move(Const.getInstance().sleepPeriod);
			}
		},Const.getInstance().sleepPeriod);
	}
	public void resume()
	{
		drawThread.start();
		moveThread.start();
		看有没有进度保存。如果有,那么就恢复。
		如果是处在游戏模式,那么就要把之前的游戏物体的数据一个个地读入,
		同时调用world的addBody函数把这个物体加入游戏世界中。
	}
	public void pause()
	{
		drawThread.pause();
		moveThread.pause();
		获取游戏世界world的迭代器,读取每个物体,保存相应的数据。
	}
	public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3)
	{
	}
	public void surfaceCreated(SurfaceHolder holder)
	{
	}
	public void surfaceDestroyed(SurfaceHolder holder)
	{
	}
}



你可能感兴趣的:(android开发,Android开发)