前回までは
・画面の重力制御
・ボールの表示
・プレイヤーの移動&移動方向の補助線
・ゲームクリア
・ゲームオーバー
・制限時間
・敵の実装
キーパー
ディフェンダー
ディフェンダー2
・当たり判定
・クラッシュエフェクト
今回はステージ選択画面を作成し、各ステージ毎に敵の配置を変えます。
ステージ選択
まず初めに、Secneを作成し、シーンの遷移を制御します。
現在は、MainActivity→InitialScene→MainSecne
修正後は、MainActivity→InitialScene→StageSelectScene→MainSecne
のようなシーンにします。
StageSelectSceneを作成
[java]
package org.geex.battlesoccerplayer;
import java.awt.Font;
import java.awt.event.KeyEvent;
import java.io.IOException;
public class StageSelectScene extends KeyListenScene implements
ButtonSprite.OnClickListener {
private Font font;
private Camera camera;
private static final int TAG_BTN1 = 1;
private static final int TAG_BTN2 = 2;
private static final int TAG_BTN3 = 3;
public StageSelectScene(MultiSceneActivity context) {
super(context);
init();
}
@Override
public void init() {
camera = getBaseActivity().getEngine().getCamera();
font = FontFactory.create(getBaseActivity().getFontManager(), getBaseActivity().getTextureManager(), 256, 256, Typeface.create(Typeface.DEFAULT, Typeface.BOLD), 32);
font.load();
Text title = new Text(0, 0, this.font,
"ステージセレクト" +
"", new TextOptions(HorizontalAlign.CENTER), getBaseActivity().getVertexBufferObjectManager());
title.setPosition(camera.getWidth() / 2 – title.getWidth() / 2, 100);
attachChild(title);
Sprite bg = getBaseActivity().getResourceUtil().getSprite(
"stageSelect.png");
bg.setPosition(0, 0);
attachChild(bg);
Sprite sprite = getBaseActivity().getResourceUtil().getSprite("pcman.png");
sprite.setPosition(20, 50 );
sprite.setScale(1.3f);
attachChild(sprite);
Sprite spriteTip = getBaseActivity().getResourceUtil().getSprite("stageSelectTip.png");
spriteTip.setPosition(150, 60);
spriteTip.setScale(1.5f);
attachChild(spriteTip);
int line1_height = 180;
ButtonSprite stage1Btn = getBaseActivity().getResourceUtil()
.getButtonSprite("selectStage1.png", "selectStage1_2.png");
stage1Btn.setPosition((camera.getWidth() / 4) – (stage1Btn.getWidth() / 2), line1_height);
stage1Btn.setTag(TAG_BTN1);
stage1Btn.setOnClickListener(this);
attachChild(stage1Btn);
registerTouchArea(stage1Btn);
ButtonSprite stage2Btn = getBaseActivity().getResourceUtil()
.getButtonSprite("selectStage2.png", "selectStage2_2.png");
stage2Btn.setPosition((camera.getWidth() / 4) * 2 – (stage2Btn.getWidth() / 2), line1_height);
stage2Btn.setTag(TAG_BTN2);
stage2Btn.setOnClickListener(this);
attachChild(stage2Btn);
registerTouchArea(stage2Btn);
ButtonSprite stage3Btn = getBaseActivity().getResourceUtil()
.getButtonSprite("selectStage3.png", "selectStage3_2.png");
stage3Btn.setPosition((camera.getWidth() / 4) * 3 – (stage3Btn.getWidth() / 2), line1_height);
stage3Btn.setTag(TAG_BTN3);
stage3Btn.setOnClickListener(this);
attachChild(stage3Btn);
registerTouchArea(stage3Btn);
}
public void onClick(ButtonSprite pButtonSprite, float pTouchAreaLocalX,
float pTouchAreaLocalY) {
ResourceUtil.getInstance(getBaseActivity()).resetAllTexture();
KeyListenScene scene = new MainScene(getBaseActivity(), MainActivity.camera, pButtonSprite.getTag());
// MainSceneへ移動
getBaseActivity().getEngine().setScene(scene);
// 遷移管理用配列に追加
getBaseActivity().appendScene(scene);
}
}
[/java]
特に難しい事はしてません。
ボタンを配置して、クリックイベントを拾ってMainSceneに移動しているだけ。
MainSceneのコンテキストで、どのステージのボタンが押下されたかの情報を渡しています。(pButtonSprite.getTag())
InitialSceneから画面遷移する際に、MainSceneをセットしていたのをStageSelectSceneに変更します。
※この当たりは「AndEngineでつくるAndroid 2Dゲーム」に記載があるので割愛します。
[java]
private void setStageData(int stage){
if(1 == stage){
currentTime = 30;
}else if(2 == stage){
currentTime = 20;
addEnemyPlayer(camera.getWidth() / 4 – 25, camera.getHeight() / 4);
addEnemyPlayer(camera.getWidth() / 2 – 25, camera.getHeight() / 4);
addEnemyPlayer2(camera.getWidth() – (camera.getWidth()) / 4 – 25, camera.getHeight() / 4);
}else if(3 == stage){
currentTime = 20;
addEnemyKeeper(camera.getWidth() / 2, 50);
}
}
[/java]
setStageDataメソッドで各ステージの設定を行います。
※initメソッドから呼び出しています。
currentTime:制限時間
addEnemyPlayer:ディフェンダーの位置を指定して配置
addEnemyPlayer2:ディフェンダー2の位置を指定して配置
addEnemyKeeper:ディフェンダー2の位置を指定して配置
ステージ毎に配置を変えるだけで、たくさんのステージが増やせますね!
今回は、Andengineの基本の部分の画面遷移が主だったので、かなり説明を簡単にしてます。
分からないことがあれば気軽にコメントください。
広告表示エリアが勢いあまって表示されてますが、それは次回記載します。
次回は
・ステージ解放の条件
・広告実装
おたのしみにー