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月中になんとか届くことになりました♩
これで年末勉強できます!やった。