以下是包含了两种触摸机制的源代码:
- package com.testsprite;
- import org.andengine.engine.camera.Camera;
- import org.andengine.engine.options.EngineOptions;
- import org.andengine.engine.options.EngineOptions.ScreenOrientation;
- import org.andengine.engine.options.resolutionpolicy.FillResolutionPolicy;
- import org.andengine.entity.scene.IOnSceneTouchListener;
- import org.andengine.entity.scene.Scene;
- import org.andengine.entity.scene.background.RepeatingSpriteBackground;
- import org.andengine.entity.sprite.AnimatedSprite;
- import org.andengine.input.touch.TouchEvent;
- import org.andengine.opengl.texture.TextureOptions;
- import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
- import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
- import org.andengine.opengl.texture.atlas.bitmap.source.AssetBitmapTextureAtlasSource;
- import org.andengine.opengl.texture.region.TiledTextureRegion;
- import org.andengine.ui.activity.BaseGameActivity;
- public class TestSprite extends BaseGameActivity {
- private static final int CAMERA_WIDTH = 800;
- private static final int CAMERA_HEIGHT = 480;
- private RepeatingSpriteBackground background;
- private TiledTextureRegion mSpriteTiledTextureRegion;
- public EngineOptions onCreateEngineOptions() {
- Camera mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
- EngineOptions mEngineOptions = new EngineOptions(true,
- ScreenOrientation.LANDSCAPE_FIXED, new FillResolutionPolicy(),
- mCamera);
- return mEngineOptions;
- }
- public void onCreateResources(
- OnCreateResourcesCallback pOnCreateResourcesCallback)
- throws Exception {
- this.background = new RepeatingSpriteBackground(800, 480,
- getTextureManager(), AssetBitmapTextureAtlasSource.create(
- this.getAssets(), "background.png"),
- getVertexBufferObjectManager());
- BitmapTextureAtlas mBitmapTextureAtlas = new BitmapTextureAtlas(
- getTextureManager(), 64, 32, TextureOptions.DEFAULT);
- mSpriteTiledTextureRegion = BitmapTextureAtlasTextureRegionFactory
- .createTiledFromAsset(mBitmapTextureAtlas, this,
- "face_circle_tiled.png", 0, 0, 2, 1);
- mBitmapTextureAtlas.load();
- pOnCreateResourcesCallback.onCreateResourcesFinished();
- }
- public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback)
- throws Exception {
- Scene mScene = new Scene();
- final AnimatedSprite face = new AnimatedSprite(100, 100,
- mSpriteTiledTextureRegion, getVertexBufferObjectManager()) {
- // 是否选中的标志
- boolean mGrabbed = false;
- public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
- float pTouchAreaLocalX, float pTouchAreaLocalY) {
- switch (pSceneTouchEvent.getAction()) {
- case TouchEvent.ACTION_DOWN:
- mGrabbed = true;
- // 将原图片放大到4.5倍(之前设置的是4倍)
- setScale(4.5f);
- break;
- case TouchEvent.ACTION_MOVE:
- if (mGrabbed) {
- // 从新设置精灵的坐标
- setPosition(pSceneTouchEvent.getX(),
- pSceneTouchEvent.getY());
- }
- break;
- case TouchEvent.ACTION_UP:
- if (mGrabbed) {
- mGrabbed = false;
- // 将图片还原到之前的样子,4倍大小
- setScale(4f);
- }
- break;
- }
- return true;
- }
- };
- // 为了点击区域大一些,我们将图片放大4倍
- face.setScale(4f);
- face.animate(new long[] { 200, 200 }, 0, 1, true);
- // 设置背景
- mScene.setBackground(background);
- mScene.attachChild(face);
- // 注册精灵要实现触摸效果
- mScene.registerTouchArea(face);
- // 为场景注册触摸监听事件
- mScene.setOnSceneTouchListener(new IOnSceneTouchListener() {
- public boolean onSceneTouchEvent(Scene pScene,
- TouchEvent pSceneTouchEvent) {
- switch (pSceneTouchEvent.getAction()) {
- // 这里,我们只取了按下抬起时的效果,方便我们观察
- case TouchEvent.ACTION_UP:
- face.setPosition(pSceneTouchEvent.getX(),
- pSceneTouchEvent.getY());
- break;
- }
- return true;
- }
- });
- pOnCreateSceneCallback.onCreateSceneFinished(mScene);
- }
- public void onPopulateScene(Scene pScene,
- OnPopulateSceneCallback pOnPopulateSceneCallback) throws Exception {
- pOnPopulateSceneCallback.onPopulateSceneFinished();
- }
- }