官方的例子中没有相关的代码,但是这个功能在游戏中又是非常常用的。
经过读源码和试验终于知道可以通过Engine的setScene(Scene pScene)方法可以实现。
我定义了两个Scene:FirstScene & SecondScene,分别拥有不同的背景颜色。
程序加载时使用FirstScene,当点击任何一个Scene时屏幕切换到另外一个Scene。
我把Engine对象作为静态常量放在一个公共类中方便随时访问。
类Constants
public class Constants {
public static Engine mEngine;
public static final float CAMERA_WIDTH = 480;
public static final float CAMERA_HEIGHT = 800;
}
类FirstScene
public class FirstScene extends Scene {
public FirstScene() {
this.setBackground(new Background(0.09804f, 0.6274f, 0.8784f));
}
@Override
public boolean onSceneTouchEvent(TouchEvent pSceneTouchEvent) {
if (pSceneTouchEvent.isActionUp())
Constants.mEngine.setScene(new SecondScene());
return super.onSceneTouchEvent(pSceneTouchEvent);
}
}
类SecondScene
public class SecondScene extends Scene {
public SecondScene() {
this.setBackground(new Background(0.99804f, 0.6274f, 0.8784f));
}
@Override
public boolean onSceneTouchEvent(TouchEvent pSceneTouchEvent) {
if (pSceneTouchEvent.isActionUp())
Constants.mEngine.setScene(new FirstScene());
return super.onSceneTouchEvent(pSceneTouchEvent);
}
}
程序入口MainActivity
public class MainActivity extends SimpleBaseGameActivity {
public EngineOptions onCreateEngineOptions() {
final Camera camera = new Camera(0, 0, Constants.CAMERA_WIDTH,
Constants.CAMERA_HEIGHT);
final EngineOptions engineOptions = new EngineOptions(true,
ScreenOrientation.PORTRAIT_FIXED, new RatioResolutionPolicy(
Constants.CAMERA_WIDTH, Constants.CAMERA_HEIGHT),
camera);
return engineOptions;
}
@Override
protected void onCreateResources() {
Constants.mEngine = this.mEngine;
}
@Override
protected Scene onCreateScene() {
this.mEngine.registerUpdateHandler(new FPSLogger());
return new FirstScene();
}
}
希望能对大家有帮助,如有不对之处请指正。