其他类型的比如16宫格的或8向行走图操作方法类似,也可参考本文。
下面是我使用的两张图片,左边的player.png为人物行走图右边的next.png我用来作为上下左右按钮的图片。
代码:
public class MainActivity extends SimpleBaseGameActivity { private static final int CAMERA_WIDTH = 800; private static final int CAMERA_HEIGHT = 480; private BitmapTextureAtlas mBitmapTextureAtlas; private TiledTextureRegion mPlayerTextureRegion; private BitmapTextureAtlas mArrowTextureAtlas; private TextureRegion mArrowTextureRegion; public EngineOptions onCreateEngineOptions() { final Camera camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT); return new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), camera); } @Override protected void onCreateResources() { BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/"); this.mBitmapTextureAtlas = new BitmapTextureAtlas(this.getTextureManager(), 128, 128); this.mPlayerTextureRegion = BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(this.mBitmapTextureAtlas, this, "player.png", 0, 0, 3, 4); this.mBitmapTextureAtlas.load(); this.mArrowTextureAtlas = new BitmapTextureAtlas(this.getTextureManager(), 128, 128); this.mArrowTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mArrowTextureAtlas, this, "next.png", 0, 0); this.mArrowTextureAtlas.load(); } @Override protected Scene onCreateScene() { final Scene scene = new Scene(); final AnimatedSprite player = new AnimatedSprite(100, 100, 48, 64, this.mPlayerTextureRegion, this.getVertexBufferObjectManager()); scene.attachChild(player); final Sprite up = new Sprite(72, 480-120, this.mArrowTextureRegion, this.getVertexBufferObjectManager()) { // 重写精灵触摸事件 @Override public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) { // 从精灵动画中读取索引从0到2的帧进行重复播放,每一帧持续时间为200毫秒 player.animate(new long[] { 200, 200, 200 }, 0, 2, true); return true; } }; up.setRotation(270);// 将箭头图片旋转279度,作为向上的按钮 up.setScale(0.5f);// 图片比较大,缩小一半 final Sprite down = new Sprite(72, 480-72, this.mArrowTextureRegion, this.getVertexBufferObjectManager()) { @Override public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) { player.animate(new long[] { 200, 200, 200 }, 6, 8, true); return true; } }; down.setRotation(90); down.setScale(0.5f); final Sprite left = new Sprite(24, 480-72, this.mArrowTextureRegion, this.getVertexBufferObjectManager()) { @Override public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) { player.animate(new long[] { 200, 200, 200 }, 9, 11, true); return true; } }; left.setRotation(180); left.setScale(0.5f); final Sprite right = new Sprite(120, 480-72, this.mArrowTextureRegion, this.getVertexBufferObjectManager()) { @Override public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) { player.animate(new long[] { 200, 200, 200 }, 3, 5, true); return true; } }; right.setScale(0.5f); // 将方向键加入到场景中 scene.attachChild(up); scene.attachChild(down); scene.attachChild(left); scene.attachChild(right); // 注册精灵的触摸事件 scene.registerTouchArea(up); scene.registerTouchArea(down); scene.registerTouchArea(left); scene.registerTouchArea(right); // 绑定场景的触摸方式 scene.setTouchAreaBindingOnActionDownEnabled(true); return scene; } }