Androidゲーム制作心得(二)——ステータスマシンと定数類
著作権所有.すべての権利は保持されます.
転載を歓迎します.転載する時、出典を明記してください.
http://blog.csdn.net/xiaofei_it
この章では、ステータスマシンと定数クラスについて説明します.
まずはゲームの状態をご紹介します.ゲームの状態は通常、ウェルカム状態、レベル選択状態、異なるゲームモード状態、結果表示状態などがあります.
一般的にImageViewまたはSurface Viewは、状態によって異なる描画を行います.たとえば、ウェルカム状態でウェルカムインタフェースを描き、ゲームモードで各物体を描きます.
前章で紹介したonKeyDown関数も,その中でも異なる状態に応じて扱う.特にゲームを行う場合は、必ずゲームの進捗を保存します.
ステータスマシンは、ステータスを記述し、変更するクラスです.このクラスは通常Singleton設計モードを用いて実現される.ステートマシンは現在の状態を保存し、ユーザーの指示に従って次の状態に切り替えます.このスイッチングは通常パラメータを必要としないため,自動化が実現される.例えばゲームウェルカムモードでは,ユーザがステートマシンのmoveToNextStateを呼び出すことで,ステートマシンを自動的に次の状態に切り替えることができ,通常はゲーム状態である.
ゲームステータスは列挙タイプで表される.
StateMachineのコード例を以下に示します.読者がSingletonのデザインパターンを知らない場合は、関連資料を参照してください.通常、このようなクラスには常にインスタンスが1つしかありません.使用するたびにgetInstance()関数が呼び出されます.
また,先に紹介したActivityのonResume関数は,対応する変更が望ましい.
ActivityのonResume関数では、次のコードを追加することが望ましいです.
StateMachine sm=StateMachine.getInstance();
preferenceにゲームの進捗記録があるかどうかを見て、ある場合はsm.setState()関数を使用して現在の状態を設定します.
定数クラスもSingletonで、ゲームパラメータを保存します.
以下にConstクラスの実装を示す.Initは構造関数とは異なります.Activity起動時に各パラメータを初期化する場合は、画面の高さや幅など、対応するパラメータを使用します.この場合はinitのパラメータでConstに渡すことができます.
Const内部のパラメータは2種類あり,finalと非finalである.注意その違い:finalはゲームが最初から固定されているパラメータで、その後は変更されません.finalではなく後で変わります.だからfinalはpublicで、finalではなく外部から直接使用することができます.ただし、finalメンバーがクラスであれば、内部のデータも変更できるので、読者は慎重に設計してください.
転載を歓迎します.転載する時、出典を明記してください.
http://blog.csdn.net/xiaofei_it
この章では、ステータスマシンと定数クラスについて説明します.
まずはゲームの状態をご紹介します.ゲームの状態は通常、ウェルカム状態、レベル選択状態、異なるゲームモード状態、結果表示状態などがあります.
一般的にImageViewまたはSurface Viewは、状態によって異なる描画を行います.たとえば、ウェルカム状態でウェルカムインタフェースを描き、ゲームモードで各物体を描きます.
前章で紹介したonKeyDown関数も,その中でも異なる状態に応じて扱う.特にゲームを行う場合は、必ずゲームの進捗を保存します.
ステータスマシンは、ステータスを記述し、変更するクラスです.このクラスは通常Singleton設計モードを用いて実現される.ステートマシンは現在の状態を保存し、ユーザーの指示に従って次の状態に切り替えます.このスイッチングは通常パラメータを必要としないため,自動化が実現される.例えばゲームウェルカムモードでは,ユーザがステートマシンのmoveToNextStateを呼び出すことで,ステートマシンを自動的に次の状態に切り替えることができ,通常はゲーム状態である.
ゲームステータスは列挙タイプで表される.
public enum StateEnum
{
welcome,gameMode,resultShow;
}
StateMachineのコード例を以下に示します.読者がSingletonのデザインパターンを知らない場合は、関連資料を参照してください.通常、このようなクラスには常にインスタンスが1つしかありません.使用するたびに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内部のパラメータは2種類あり,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)
{
}
}