AndEngineを使用してAndroid用のゲームを作成しています。 パート3

みなさんこんにちは!

AndEngineを使用して非常に単純ではない Androidゲームを作成する方法に関する一連の記事の長続きです。



以前の記事を既にレビューしましたか?

パート1

パート2

それでは続けましょう。



今日は、ゲームオブジェクトのマップを扱います。 彼女はどんな人ですか? 13x7の寸法のゲームオブジェクトの2次元配列。 サイズは少し奇妙ですが、64x64のセルサイズではかなり論理的に見え始めます。

ステップ1.必要な定数とフィールドを設定します。

public class GameObjectsMap {

public static final int HEIGHT = 7;

public static final int WIDTH = 13;

public static final float CELL_SIZE_X = 64f;

public static final float CELL_SIZE_Y = 64f;



public static final int LASER_LAYER = 0;

public static final int GAME_OBJECTS_LAYER = LASER_LAYER + 1;



private GameObject[][] mMap = new GameObject[WIDTH][HEIGHT];

private Textures mTextures;

GameObjectsMap(final Textures textures) {

mTextures = textures;

}

}




* This source code was highlighted with Source Code Highlighter .






ステップ2.オブジェクトを追加します。

便宜上、オブジェクトをフィールドに追加するメソッドが必要です。

public void add(Type type, final int posH, final int posW, final int angle) {

GameObject object = null ;

switch (type) {

case lasergun:

object = new LaserGun(posH, posW, angle, mTextures

.getLaserGun());

break ;

case mirror:

break ;

case target:

break ;

default :

break ;

}

mMap[posH][posW] = object ;

}




* This source code was highlighted with Source Code Highlighter .






ステップ3.オブジェクトを表示します。

注意深い読者は、GameObjectクラスの説明の前の投稿で列挙型を見ることができます。 addメソッドでは、オブジェクトのタイプ、位置、回転角度を渡します。その後、オブジェクトは配列に表示されますが、表示されません。 ゲームオブジェクトを表示するには、次のメソッドが必要です。

public void addToScene(Scene scene) {

for ( int i = 0; i < mMap.length; i++) {

for ( int j = 0; j < mMap[i].length; j++) {

GameObject o = mMap[i][j];

if (o != null ) {

o.attachTo(scene);

}

}

}

}




* This source code was highlighted with Source Code Highlighter .






とても簡単です。 念のため:

public void clear() {

for ( int i = 0; i < mMap.length; i++) {

Arrays.fill(mMap[i], null );

}

}




* This source code was highlighted with Source Code Highlighter .






これで、単純で明確なタイプの構造を使用して、オブジェクトをシーンに追加できます。



mGameObjectsMap.add(Type.lasergun、0、0、3);



手順4. [処理中]をタッチします。

それでも同じように、私たちはゲームを作成し、ユーザーとのやり取りがなければ、まったくそれを行うことはできません。 残念ながら、Entityクラスには標準のハンドラがないため、通常どおりに動作します。



scene.setOnSceneTouchListener(mGameObjectsController);



mGameObjectsControllerがIOnSceneTouchListenerインターフェイスを実装する場所。 実際、通常のOnTouchListenerとそれほど違いはありません。 そして、私の場合、次のようになります。

public boolean onSceneTouchEvent(final Scene pScene, TouchEvent pSceneTouchEvent) {

if (pSceneTouchEvent.isActionDown()) {

float x = pSceneTouchEvent.getX();

float y = pSceneTouchEvent.getY();

int cellNumX = ( int ) ((x - x % GameObjectsMap.CELL_SIZE_X)

/ GameObjectsMap.CELL_SIZE_X);

int cellNumY = ( int ) ((y - y % GameObjectsMap.CELL_SIZE_X)

/ GameObjectsMap.CELL_SIZE_X);

DynamicGameObject object = (DynamicGameObject)mMap.getMap()[cellNumX][cellNumY];

if ( object != null ) {

//

}

}

return false ;

}




* This source code was highlighted with Source Code Highlighter .








はい、同意します。セルの位置を異なる方法で計算できますが、このオプションは機能し、気に入っています。



今日は以上です。 私のプロジェクトの一部をここで見つけることができます。 質問、提案、建設的な批判はいつでも歓迎します。

PSソースコードはまだそこにあります。

PPSの続き。



All Articles