0

我是 andengine 的新手,想知道如何在两个 BaseGameActivities 之间切换。而且从第一个活动切换到第二个活动时,切换之间没有黑屏过渡。有没有可能的方法来做到这一点。请帮帮我。

4

1 回答 1

2

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()方法并注册实体修饰符以使图像移动。希望它会引导您朝着正确的方向前进,以完成您想做的事情。

于 2013-04-15T07:23:06.870 回答