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