私は andengine を初めて使用し、2 つの BaseGameActivities を切り替える方法を知りたいと思っています。また、最初のアクティビティから 2 番目のアクティビティに切り替えるときに、切り替えの間に黒い画面が遷移することはありません。それを行う方法はありますか?私を助けてください。
1 に答える
ABaseGameActivity
は、他の Android としても使用できますActivity
。
Intent intent = new Intent(this, MyOtherBaseGameActivity.class);
startActivity(intent);
したがって、プログラムから別のアプリに変更したい場合 (おそらくブラウザーを開くことで…)、他の Android アプリと同様に変更できます。ただし、両方のアクティビティが独自のアプリの一部である場合、これが推奨されるケースはほとんどありません (2 つ目のプログラムを開始するようなものです)。この投稿で説明されているように、アクティビティ間でデータを交換することは可能ですが。
Views
しかし、AndEngine で切り替える方法を探しているだけかもしれません。その場合はScenes
、移行を必要とせずに切り替えることができます。
MyOtherScene secondScene = new MyOtherScene();
mEngine.setScene(secondScene);
そうすれば、すべての画像を再度読み込む必要なく、表示されているものを切り替えることができます。
編集:
AndEngine を使用してアクティビティを切り替えることも、シーンをスムーズに切り替えることもできないためです。ここでは、2 つの画面 (メニューなど) を切り替える方法の簡単な例を示します。この例では、画面は実際には 2 つの異なる画像です (ディスプレイと同じくらいの大きさで、おそらくいくつかの背景画像です)。注: AndEngine には「画面」のようなものはありません。エンティティを拡張する自作のクラスです。
あなたの画面
public MyScreen extends Entity{
private float firstX;
public MyScreen(Sprite niceBackgroundImage1, Sprite niceBackgroundImage2){
this.attachChild(niceBackgroundImage1); // attach something to the screen, so you can see it (preferably an image that is as big as your camera)
this.attachChild(niceBackgroundImage2);
this.firstY=-1; // this is a variable to remember the first x coordinate touched
}
@Override
public boolean onAreaTouched(TouchEvent sceneTouchEvent, float touchAreaLocalX, float touchAreaLocalY) {
if(sceneTouchEvent.getAction()==TouchEvent.ACTION_DOWN){
this.firstY=touchAreaLocalX; // remember the x, on the first touch
}
if(sceneTouchEvent.getAction()==TouchEvent.ACTION_MOVE){
if(touchAreaLocalX>firstY+20){
// user swiped from left to right (at least 20 pixels)
niceBackgroundImage1.registerEntityModifier(new MoveModifier(3f, 0, niceBackgroundImage1.getWidth(), 0, 0, EaseBounceOut.getInstance()));
// the last line actualy moves the nice..image1 from left to right (in 3 seconds) and lets it bounce a little bit before it is completely out of the screen
return true;
}
}
return false;
}
...
}
あなたの活動
private HUD hud; // create a HUD
...
@Override
protected void onCreateResources() {
this.hud = new HUD(); // init the HUD
this.myScreen = new MyScreen(image1, image2) // init the screen
this.hud.attachChild(myScreen); // attach the screen to the hud
mEngine.getCamera().setHud(hud); // attach your HUD to the camera
}
@Override
protected Scene onCreateScene() {
Scene myScene = new Scene();
myScene.registerTouchArea(myScreen); // you have to register the touch area of your Screen Class to the scene.
mEngine.setScene(myScene);
}
そして、これがどのように機能するかです:
を拡張する独自の画面クラスを作成しますEntity
。AndEngineEntity
に表示されるすべてのもの (スプライト、長方形、またはシーン全体など) を指定できます。見栄えを良くするために、画面クラスに何かを配置します。できれば、ディスプレイ全体を埋める大きな画像を配置します。そのイメージは、後でタッチを登録する責任があります。画像が小さすぎてユーザーが画像を見逃した場合、タッチは登録されません。
この場合、 のインスタンスをMyScreen
カメラの HUD にアタッチします。そうすれば、ディスプレイ上の固定位置に配置され、固定サイズになります(scene
スクロール可能またはズーム可能にしたい場合に備えて)。
アプリが起動すると、HUD が作成され、カメラとMyScreen
クラスにアタッチされます。シーンが作成され、画面の領域がタッチ領域としてシーンに登録されます。水平軸上のスワイプの動きがスクリーン クラスによって認識されると、最初の画像が画面の外に (スワイプと同じ方向に) 移動します。
ただし、注意してください。これは単なる例です。最初の画像が画面の外に移動したときのタッチの動作や、実際の画面の大きさなどについては何も定義されていません...
これは非常に長い例であることはわかっていますが、最初はうまくいかないかもしれませんし、異なる画面間の切り替えを行う唯一の方法ではないことは間違いありません。ただし、メソッドをオーバーライドしonAreaTouched()
、エンティティ修飾子を登録して画像を移動する方法を示しています。あなたがやりたいことを達成するために、それがあなたを正しい方向に導くことを願っています。