AndEngine/Spriteの表示とAnimationの追加

早いもので後2日で仕事納め。社会人になって、そろそろ1年経ってしまいそうです。
ここ一週間はAndEngineでひたすらアプリ制作を続けていました。


AndEngineは、cocos2dより遥かにSprite(画像)を表示させるのがめんどくさいです。
今回は、その表示方法、プラス、簡単なアニメーションの方法をご紹介。

AndEngineの構成や特徴

■構成
AndEngineライブラリのクラス図は↓のようになっています。



細かいところは正直まだ勉強中です。
アニメーション回り(Modifierがつくやつ)はだいぶ慣れたと思います。


■特徴

1、BaseGameActivityを継承させる

public class クラス名 extends BaseGameActivity {
}


2、画像を表示させるときにOverrideするメソッド

@Override
public Engine onLoadEngine() {
}

@Override
public void onLoadResources() {
}

@Override
public Scene onLoadScene() {
}

@Override
public void onLoadComplete() {
}


Overrideするメソッドの簡単な説明(予想)

@Override
public Engine onLoadEngine() {
}

このメソッドは、AndEngine内で司令塔的な役割をするEngineのインスタンスの作成や、設定行う。

@Override
public void onLoadResources() {
}

このメソッドは、Activity内で使う画像や音声の読み込みを行うメソッド。
Texture
TextureRegion
でアプリ内で使うリソースをTexture内に組み込んでいるみたい。
*Textureという概念が未だによくわかりませんが。。。

@Override
public Scene onLoadScene() {
}

Sceneの作成と設定を行い、最後に、returnでSceneのインスタンスを返します。
レイヤー構成を考え、スプライトの表示を行うメソッドです。

@Override
public void onLoadComplete() {
}

ここは未だによくわかっていません。今週にはわかるはず。。。
(後ほど追記します。)


3、画像を置く場所
画像は、プロジェクト内の「assets」フォルダに、「gfx」フォルダ(グラフィックスの略)を作り、「face_box.png」という画像を入れます。
*音声は、「mfx」フォルダを作りそこに入れます。

Spriteを表示させるサンプルコード

public class SpriteExample extends BaseGameActivity {

	private static final int CAMERA_WIDTH = 320;
	private static final int CAMERA_HEIGHT = 480;

	private Camera mCamera;
	private Texture mTexture;
	private TextureRegion mFaceTextureRegion;

	@Override
	public Engine onLoadEngine() {
		this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
		return new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.mCamera));
	}

	@Override
	public void onLoadResources() {
		this.mTexture = new Texture(32, 32, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
		this.mFaceTextureRegion=TextureRegionFactory.createFromAsset(this.mTexture,this,"gfx/face_box.png", 0, 0);
		this.mEngine.getTextureManager().loadTexture(this.mTexture);
	}

	@Override
	public Scene onLoadScene() {
		this.mEngine.registerUpdateHandler(new FPSLogger());

		final Scene sceneA = new Scene(1);

                //Spriteを画像の中央に表示させるための座標
	        final int centerX = (CAMERA_WIDTH - this.mFaceTextureRegion.getWidth()) / 2;
		final int centerY = (CAMERA_HEIGHT - this.mFaceTextureRegion.getHeight()) / 2;
	
		//Spriteの作成&レイヤーに表示
		final Sprite face = new Sprite(centerX, centerY, this.mFaceTextureRegion);
		sceneA.getTopLayer().addEntity(face);
		
		return sceneA;
	}

	@Override
	public void onLoadComplete() {

	}
}

Animationを追加

@Override
public Scene onLoadScene() {
	this.mEngine.registerUpdateHandler(new FPSLogger());

	final Scene sceneA = new Scene(1);

        //Spriteを画像の中央に表示させるための座標
	final int centerX = (CAMERA_WIDTH - this.mFaceTextureRegion.getWidth()) / 2;
        final int centerY = (CAMERA_HEIGHT - this.mFaceTextureRegion.getHeight()) / 2;
	
        //Spriteの作成&レイヤーに表示
        final Sprite face = new Sprite(centerX, centerY, this.mFaceTextureRegion);
	sceneA.getTopLayer().addEntity(face);
		

       SequenceShapeModifier faceAction = new SequenceShapeModifier(
							new RotationModifier(1, 0, 30),
							new RotationModifier(1, 30, 0)
												);
        face.addShapeModifier(faceAction);

	return sceneA;
}


これで、
1、1秒で30度回転
2、1秒で逆30度に回転
するActionをSpriteがしてくれます。


1、Animationの設定

new RotationModifier(1, 0, 30)

引数は、
「動作時間」、「動作前の角度」、「動作後の角度」

となっています。

このように各アニメーションごとにクラスが設定されており、そのインスタンスを作成するという流れでアニメーションの設定を行います。


2、Sequence化

new SequenceShapeModifier(IShapeModifier pShapeModifier)

で複数のアクションをシーケンス化(連続再生)させることができます。


3、SpriteにActionを追加

face.addShapeModifier(faceAction);

でSpriteにアクションを追加させることができます。
他のSpriteに同じActionを追加させたい場合は、

face.addShapeModifier(faceAction.clone())

とします。
.clone()をつけないとうまく動いてくれませんので注意が必要です。


てな感じで、現在のAndEngineの知識を少しだけまとめてみました。
1月前半にはAndroidアプリ作り終えたいな。。。



そういえば、

が、12月中になんとか届くことになりました♩
これで年末勉強できます!やった。