ステージクリアウィンドウにはタイルspriteを三つ貼り付け、評価として受け取る星の数(1から3)に基づいてタイルインデックスを変更します。
// Level Complete Window public ITextureRegion complete_window_region; public ITiledTextureRegion complete_stars_region;
complete_window_region = BitmapTextureAtlasTextureRegionFactory.createFromAsset(gameTextureAtlas, activity, "levelCompleteWindow.png"); complete_stars_region = BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(gameTextureAtlas, activity, "star.png", 2, 1);
assets/gfx/gameから、 levelCompleteWindow.pngファイルとstar.pngファイルを読み込んでいます。
package com.matimdev.extras; import org.andengine.engine.camera.Camera; import org.andengine.entity.scene.Scene; import org.andengine.entity.sprite.Sprite; import org.andengine.entity.sprite.TiledSprite; import org.andengine.opengl.vbo.VertexBufferObjectManager; import com.matimdev.manager.ResourcesManager; public class LevelCompleteWindow extends Sprite { private TiledSprite star1; private TiledSprite star2; private TiledSprite star3; public enum StarsCount { ONE, TWO, THREE } public LevelCompleteWindow(VertexBufferObjectManager pSpriteVertexBufferObject) { super(0, 0, 650, 400, ResourcesManager.getInstance().complete_window_region, pSpriteVertexBufferObject); attachStars(pSpriteVertexBufferObject); } private void attachStars(VertexBufferObjectManager pSpriteVertexBufferObject) { star1 = new TiledSprite(150, 150, ResourcesManager.getInstance().complete_stars_region, pSpriteVertexBufferObject); star2 = new TiledSprite(325, 150, ResourcesManager.getInstance().complete_stars_region, pSpriteVertexBufferObject); star3 = new TiledSprite(500, 150, ResourcesManager.getInstance().complete_stars_region, pSpriteVertexBufferObject); attachChild(star1); attachChild(star2); attachChild(star3); } /** * Change star`s tile index, depends on stars count. * @param starsCount */ public void display(StarsCount starsCount, Scene scene, Camera camera) { // Change stars tile index, based on stars count (1-3) switch (starsCount) { case ONE: star1.setCurrentTileIndex(0); star2.setCurrentTileIndex(1); star3.setCurrentTileIndex(1); break; case TWO: star1.setCurrentTileIndex(0); star2.setCurrentTileIndex(0); star3.setCurrentTileIndex(1); break; case THREE: star1.setCurrentTileIndex(0); star2.setCurrentTileIndex(0); star3.setCurrentTileIndex(0); break; } // Hide HUD camera.getHUD().setVisible(false); // Disable camera chase entity camera.setChaseEntity(null); // Attach our level complete panel in the middle of camera setPosition(camera.getCenterX(), camera.getCenterY()); scene.attachChild(this); } }
private LevelCompleteWindow levelCompleteWindow;
levelCompleteWindow = new LevelCompleteWindow(vbom);
private static final Object TAG_ENTITY_ATTRIBUTE_TYPE_VALUE_LEVEL_COMPLETE = "levelComplete";
else if (type.equals(TAG_ENTITY_ATTRIBUTE_TYPE_VALUE_LEVEL_COMPLETE)) { levelObject = new Sprite(x, y, resourcesManager.complete_stars_region, vbom) { @Override protected void onManagedUpdate(float pSecondsElapsed) { super.onManagedUpdate(pSecondsElapsed); if (player.collidesWith(this)) { levelCompleteWindow.display(StarsCount.TWO, GameScene.this, camera); this.setVisible(false); this.setIgnoreUpdate(true); } } }; levelObject.registerEntityModifier(new LoopEntityModifier(new ScaleModifier(1, 1, 1.3f))); }どういった処理を行っているかというと、updateの度にプレイヤーと衝突しているかどうかを確認する sprite を、新しく作成しています。 もし衝突していた場合は、ステージクリア画面を表示します。 このケースでは二つ星評価になります (パラメータを変更することで評価を変更可能です)。
<?xml version="1.0" encoding="utf-8"?> <level width="1400" height="780"> <entity x="100" y="100" type="platform1"/> <entity x="200" y="200" type="platform1"/> <entity x="400" y="200" type="platform2"/> <entity x="530" y="200" type="platform2"/> <entity x="660" y="200" type="platform2"/> <entity x="880" y="240" type="platform3"/> <entity x="1100" y="330" type="platform3"/> <entity x="400" y="270" type="coin"/> <entity x="500" y="400" type="coin"/> <entity x="600" y="400" type="coin"/> <entity x="1280" y="550" type="levelComplete"/> <entity x="60" y="140" type="player"/> </level>もと遊べるように、このステージを少し編集しました。ステージクリアオブジェクトを"ステージ"の最後に追加しました。 どのように動作するかテストしてみてください。ステージクリアウィンドウが表示されるでしょう (例として、黄色星二つと灰色星一つの状態で)
jumper_game_tutorial.rar
ファイルをダウンロードする |
最初の記事で述べたように、AndEngine GLES2 Anchor-Center ブランチが必要ということを忘れないでください( box2d 物理拡張も同じ)。 多くの人がGLES2 ブランチを使ってエラーが発生したと不満を言い続けているので、私はこのことを啓蒙しなければならないのです。
注意: サンプルコードは教育目的のみに使用することができ、 同意なしにそれ以外の目的で使用することはできません。
前の記事 |