现在的位置: 首页 > 综合 > 正文

AndEngine中实现两个Scene切换

2013年09月12日 ⁄ 综合 ⁄ 共 1577字 ⁄ 字号 评论关闭

官方的例子中没有相关的代码,但是这个功能在游戏中又是非常常用的。

经过读源码和试验终于知道可以通过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();
	}
}

希望能对大家有帮助,如有不对之处请指正。

抱歉!评论已关闭.