也是在游戏中很常用的功能,参考了官方的例子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; } }