AndEngine实现Sprite更换图片

也是在游戏中很常用的功能,参考了官方的例子UpdateTextureExample,不同的是我使用的是Sprite和TextureRegion,而官方例子中是AnimatedSprite和TiledTextureRegion。其实原理是一样的。

我准备了2张图片a.jpg和b.jpg,Scene启动时加载a.jpg,点击Scene在两张图片间进行切换。

public class MainActivity extends SimpleBaseGameActivity {
	private static final int CAMERA_WIDTH = 320;
	private static final int CAMERA_HEIGHT = 480;

	private BitmapTextureAtlas mBitmapTextureAtlas;
	private TextureRegion mFaceTextureRegion;

	private boolean mSmile = true;

	@Override
	public EngineOptions onCreateEngineOptions() {
		Toast.makeText(
				this,
				"Touch the screen to update (redraw) an existing BitmapTextureAtlas with every touch!",
				Toast.LENGTH_LONG).show();

		final Camera camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);

		return new EngineOptions(true, ScreenOrientation.PORTRAIT_FIXED,
				new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), camera);
	}

	@Override
	protected void onCreateResources() {
		BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");

		this.mBitmapTextureAtlas = new BitmapTextureAtlas(
				this.getTextureManager(), 128, 128, TextureOptions.BILINEAR);
		this.mFaceTextureRegion = BitmapTextureAtlasTextureRegionFactory
				.createFromAsset(this.mBitmapTextureAtlas, this, "a.jpg", 0, 0);
		this.mBitmapTextureAtlas.load();
	}

	@Override
	protected Scene onCreateScene() {
		this.mEngine.registerUpdateHandler(new FPSLogger());

		final Scene scene = new Scene();
		scene.setBackground(new Background(0.09804f, 0.6274f, 0.8784f));

		final float centerX = (CAMERA_WIDTH - this.mFaceTextureRegion
				.getWidth()) / 2;
		final float centerY = (CAMERA_HEIGHT - this.mFaceTextureRegion
				.getHeight()) / 2;

		final Sprite face = new Sprite(centerX, centerY, mFaceTextureRegion,
				this.getVertexBufferObjectManager());
		scene.attachChild(face);
                // scene的点击事件
		scene.setOnSceneTouchListener(new IOnSceneTouchListener() {
			@Override
			public boolean onSceneTouchEvent(Scene pScene,
					TouchEvent pSceneTouchEvent) {
				if (pSceneTouchEvent.isActionUp()) {
                                        // 通过一个条件来判断当前需要加载哪张图片
					MainActivity.this.mSmile = !MainActivity.this.mSmile;
					BitmapTextureAtlasTextureRegionFactory.createFromAsset(
							MainActivity.this.mBitmapTextureAtlas,
							MainActivity.this,
							MainActivity.this.mSmile ? "a.jpg" : "b.jpg", 0, 0);
				}
				return false;
			}
		});
		return scene;
	}
}



你可能感兴趣的:(游戏,Class,float)