工厂模式--ObjectFactory
工厂模式是一种十分常用的设计模式,特别是在游戏开发过程中,特别用于产生各种敌人对象,子弹对象,粒子效果。
而在AndEngine中我们常常使用工厂模式去创建音乐、纹理图片、字体。
那我们该如何去使用这种设计模式呢?
1、首先们要创建一个父类,很多的对象继承于它
public static class BaseObject{
private int mX;
private int mY;
BaseObject(final int pX,final int pY){
this.mX=pX;
this.mY=pY;
}
}
2、一但我们获得子类的BaseObject,我们就可以实现工厂模式了,在ObjectFactory中,我们可以实现创建和返回相应对象。
public class ObjectFactory{
public static LargeObject createLargeObject(final int pX,final int pY){
return new LargeObject(pX,pY);
}
public static SmallObject createSmallObject(final int pX,final int pY){
return new SmallObject(pX,pY);
}
}
在ObjectFactory中,我们可以创建BaseObject,这个类包含了两个变量:pX,pY,我们可以设定实体的位置,一旦调用这个静态方法,我们就可以返回BaseObject的子类:LargeObject或者是SmallObject。这个工厂类的作用就是我们该创建哪一个子类。
在以上的例子里我们仅仅定义了类的位置,在实际使用的时候,我们可以设定更多的参数,比如对于各种的Sprite,我们可以创建一个SpriteFactory类,通过SpriteFactory.createSprite(),SpriteFactory.createButtonSprite(),SpriteFactory.createTiledSprite(),这些当然需要更多的参数---位置,大小,颜色...
2、单例模式--GameManager
单例模式我们仅可创建一个对象,而其存在于整个应用的生命周期,加上定义为静态类使之能在整个应用中我们都可以调用。一般单例模式不允许创建对象副本,保证对象的唯一性,也保证了对象访问的灵活性,减少了创建对象的开销。
public class GameManager{
private static GameManager INSTANCE:
private int mBirdCount;
private int mCurrentScore;
private int mEnemyCount;
GameManager(){ //必须要的构造函数,便外部的类无法通过new创建实例,单例模式的精髓所在。
}
public static GameManager getInstance(){ //上帝关上了一扇门,必会打开一扇窗
if(INSTANCE==null)
{
INSTANCE=new GameManager();
}
return INSTANCE;
}
public int getCurrentScore(){
return this.mCurrentScore;
}
public int getBirdCount(){
return this.mBirdCount;
}
public void increamentScore(int pIncrementBy){
mCurrentScore+=pIncrementBy;
}
public void decrementBirdCount(){
mBirdCount-=1;
}
//重置游戏参数
public void resetGame(){
this.mCurrentScore=GameManager.INITAL_SCORE:
this.mBirdCount=GameManager.INITAL_BIRD_COUNT:
this.mEnemyCount=GameManager.INITAL_ENEMY_COUNT:
}
}
GameManager 中保存着游戏的状态信息,其是根随着游戏的进行而不断变化着的。通过相应的方法,改变游戏状态数据信息。而当我们开始新的关卡,我们可以通过调用resetGame()方法,重置游戏参数。