官方的例子中没有相关的代码,但是这个功能在游戏中又是非常常用的。
经过读源码和试验终于知道可以通过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; }
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); } }
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(); } }