我是 andengine 的新手,想知道如何在两个 BaseGameActivities 之间切换。而且从第一个活动切换到第二个活动时,切换之间没有黑屏过渡。有没有可能的方法来做到这一点。请帮帮我。
1 回答
ABaseGameActivity
也可以用作任何其他 Android Activity
:
Intent intent = new Intent(this, MyOtherBaseGameActivity.class);
startActivity(intent);
因此,如果您想从您的程序更改为另一个应用程序(可能通过打开浏览器...),您也可以像使用任何其他 Android 应用程序一样进行操作。但是,如果这两个活动都是您自己的应用程序的一部分,则很少有推荐的情况(就像启动第二个程序一样)。尽管可以如本文所述在活动之间交换数据。
但也许你只是在寻找一种Views
在 AndEngine 之间切换的方法。如果是这种情况,您可以在Scenes
无需任何过渡的情况下进行切换。
MyOtherScene secondScene = new MyOtherScene();
mEngine.setScene(secondScene);
这样您就可以在显示的内容之间切换,而无需再次加载每张图像。
编辑:
由于不能使用 AndEngine 在Activities之间切换,也不可能在场景之间进行平滑切换。这里有一个关于如何在两个屏幕(例如菜单)之间切换的快速示例。在这个例子中,屏幕实际上是 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
。AnEntity
可以是 AndEngine 中所有可见的东西(如 Sprite、Rectangle 甚至整个场景)。在你的屏幕类中放一些东西让它看起来不错,最好是一张能填满整个显示器的大图。该图像将负责随后注册触摸。如果图像太小而用户错过了图像,则不会注册触摸。
在这种情况下,我将实例附加MyScreen
到相机 HUD。这样,它将位于显示屏上的固定位置,并且具有固定的大小(以防万一您想使scene
可滚动或可缩放)。
现在,当应用程序启动时,HUD 将被创建并附加到相机和你的MyScreen
类。然后将创建场景并将屏幕区域注册为场景的触摸区域。当屏幕类注意到水平轴上的滑动移动时,第一个图像将移出屏幕(与滑动方向相同)。
但要小心,这只是一个例子。当第一张图像移出屏幕或屏幕实际有多大等时,没有任何定义触摸必须如何动作......
我知道这是一个相当长的例子,也许它甚至不会在第一次工作,而且它绝对不是如何在不同屏幕之间切换的唯一方法。但它向您展示了如何覆盖该onAreaTouched()
方法并注册实体修饰符以使图像移动。希望它会引导您朝着正确的方向前进,以完成您想做的事情。