android小游戏制作心得(二)——状态机和常数类

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

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

http://blog.csdn.net/xiaofei_it

本章介绍状态机和常数类。

首先介绍游戏状态。游戏状态通常会有欢迎状态、关卡选择状态、不同游戏模式状态、结果显示状态等。

一般ImageView或者SurfaceView都会根据不同状态进行不同的绘制。比如在欢迎状态就要绘制欢迎界面,在游戏模式就要绘制各个物体。

上一章介绍的onKeyDown函数,其中也是根据不同状态进行处理的。尤其是在游戏进行时,一定要保存游戏进度。

状态机是一个描述和改变状态的类。这个类通常要使用Singleton设计模式实现。状态机保存当前的状态,并且根据用户指示切换到下一个状态。这个切换通常不需要参数,因此实现了自动化。比如游戏欢迎模式中,用户调用状态机的moveToNextState就可以让状态机自动切换到下一个状态,通常是游戏状态。

游戏状态用枚举类型表示。

public enum StateEnum
{
	welcome,gameMode,resultShow;
}

以下给出StateMachine的代码示例。如果读者对Singleton设计模式不了解,请参考相关资料。通常这样的类始终只有一个实例,每次使用它都要调用getInstance()函数。

public class StateMachine
{
	private StateEnum state;
	private static StateMachine instance=null;
	private StateMachine()
	{
		state=StateEnum.welcome;
	}
	public static StateMachine getInstance()
	{
		if (instance==null)
			instance=new StateMachine();
		return instance;
	}
	public StateEnum getState()
	{
		return state;
	}
	public void setState(StateEnum state)
	{
		this.state=state;
	}
	public void moveToNextState()
	{
		switch (state)
		{
		case welcome:
			state=StateEnum.gameMode;break;
		case gameMode:
			state=StateEnum.resultShow;break;
		case resultShow:
			state=StateEnum.gameMode;break;
		}
	}
}

另外,之前介绍的Activity的onResume函数最好进行相应的更改。

在Activity的onResume函数中,最好添加以下代码:

StateMachine sm=StateMachine.getInstance();

看preference中有没有游戏进度记录,如果有,那么还要使用sm.setState()函数设置当前的状态。


常数类也是Singleton,保存游戏参数。

下来给出Const类的实现。init不同于构造函数。在Activity启动时初始化各参数的时候要用到相应的参数,比如屏幕高和宽,这个时候可以通过init的参数传给Const。

Const内部的参数分为两类,final和非final。注意其中的区别:final是游戏一开始就固定了的参数,之后不会再改变。而非final在之后会改变。所以final是public,可以由外部直接使用,而非final则不是。不过要注意,如果final成员是一个类,那么其内部的数据也是可以改变的,所以读者在设计时要谨慎。

public class Const
{
	public final int i1;
	private int i2;
	private static Const instance=null;
	private Const()
	{
	}
	public void setI2(int i)
	{
		i2=i;
	}
	public int getI2()
	{
		return i2;
	}
	public static Const getInstance()
	{
		if (instance==null)
			instance=new Const();
		return instance;
	}
	public void init(int i)
	{
	}
}


你可能感兴趣的:(android,安卓,状态机,游戏制作,游戏状态)