如何正确使用andEngine中的touch listener/event和ease功能



此触摸事件从不触发。我一直在浏览示例和源代码,现在对做我想做的事情的最佳方法有点困惑。

我给场景画了一个精灵。我希望该精灵与EaseFunction一起移动到用户触摸事件的坐标。

这是迄今为止的代码:

private static final int CAMERA_WIDTH = 720;
private static final int CAMERA_HEIGHT = 480;
// ===========================================================
// Fields
// ===========================================================
private Camera mCamera;
private BitmapTextureAtlas mTexture;
private TextureRegion mFaceTextureRegion;
// ===========================================================
// Constructors
// ===========================================================
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
public Engine onLoadEngine() {
    this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
    return new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.mCamera));
}
@Override
public void onLoadResources() {
    this.mTexture = new BitmapTextureAtlas(64, 32, TextureOptions.BILINEAR);
    this.mFaceTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mTexture, this, "gfx/boxface.png", 0, 0);
    this.getEngine().getTextureManager().loadTexture(this.mTexture);
}
@Override
public Scene onLoadScene() {
    this.getEngine().registerUpdateHandler(new FPSLogger());
    final Scene scene = new Scene();
    scene.setBackground(new ColorBackground(0.09804f, 0.6274f, 0.8784f));
    final int x = (CAMERA_WIDTH - this.mFaceTextureRegion.getWidth()) / 2;
    final int y = (CAMERA_HEIGHT - this.mFaceTextureRegion.getHeight()) / 2;
    final Sprite face = new Sprite(x, y, this.mFaceTextureRegion);
    scene.attachChild(face);
    face.setPosition(134, 200);

//这就是我尝试实现触摸监听器的地方,代码//对吗?

    scene.setOnAreaTouchListener(new IOnAreaTouchListener() {
        //@Override
        public boolean onAreaTouched(TouchEvent pSceneTouchEvent,ITouchArea pTouchArea, float pTouchAreaLocalX,float pTouchAreaLocalY) {
            if(pSceneTouchEvent.isActionDown()) {
                int facePosX = (int) (pSceneTouchEvent.getX() - face.getWidth() / 2);
                int facePosY = (int) (pSceneTouchEvent.getY() - face.getHeight() / 2);
                face.registerEntityModifier(new MoveModifier(500, face.getX(), facePosX, face.getY(),facePosY,EaseQuadIn.getInstance())); 
            }
            return false;
        }
    });
    return scene;
}

@Override
public void onLoadComplete() {
}

最后,我很确定我需要使用pScene.registerTouchArea(face);和pScene.setTouchAreaBindingEnabled(true);

任何澄清都是有用的。感谢

这很管用!只是不断挖掘,在这里找到了答案:http://www.andengine.org/forums/tutorials/touchevent-t1490.html

这是完整的代码。精灵加载到页面的中心。无论你在哪里点击精灵,都会"切换"或轻松到你的触摸坐标。

package and.engine.test;
import org.anddev.andengine.engine.Engine;
import org.anddev.andengine.engine.camera.Camera;
import org.anddev.andengine.engine.options.EngineOptions;
import org.anddev.andengine.engine.options.EngineOptions.ScreenOrientation;
import org.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.anddev.andengine.entity.util.FPSLogger;
import org.anddev.andengine.ui.activity.BaseGameActivity;
import org.anddev.andengine.entity.modifier.MoveModifier;
import org.anddev.andengine.entity.scene.Scene;
import org.anddev.andengine.util.modifier.ease.EaseQuadIn;
import org.anddev.andengine.entity.scene.Scene.IOnSceneTouchListener;
import org.anddev.andengine.entity.scene.background.ColorBackground;
import org.anddev.andengine.entity.sprite.Sprite;
import org.anddev.andengine.input.touch.TouchEvent;
import org.anddev.andengine.opengl.texture.TextureOptions;
import org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
import org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
import org.anddev.andengine.opengl.texture.region.TextureRegion;

public class AndEnginetestActivity extends BaseGameActivity {
    // ===========================================================
    // Constants
    // ===========================================================
    private static final int CAMERA_WIDTH = 720;
    private static final int CAMERA_HEIGHT = 480;
    // ===========================================================
    // Fields
    // ===========================================================
    private Camera mCamera;
    private BitmapTextureAtlas mTexture;
    private TextureRegion mFaceTextureRegion;
    // ===========================================================
    // Constructors
    // ===========================================================
    // ===========================================================
    // Getter & Setter
    // ===========================================================
    // ===========================================================
    // Methods for/from SuperClass/Interfaces
    // ===========================================================
    @Override
    public Engine onLoadEngine() {
        this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
        return new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.mCamera));
    }
    @Override
    public void onLoadResources() {
        this.mTexture = new BitmapTextureAtlas(64, 32, TextureOptions.BILINEAR);
        this.mFaceTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mTexture, this, "gfx/boxface.png", 0, 0);
        this.getEngine().getTextureManager().loadTexture(this.mTexture);
    }
    @Override
    public Scene onLoadScene() {
        this.getEngine().registerUpdateHandler(new FPSLogger());
        final Scene scene = new Scene();
        scene.setBackground(new ColorBackground(0.09804f, 0.6274f, 0.8784f));
        final int x = (CAMERA_WIDTH - this.mFaceTextureRegion.getWidth()) / 2;
        final int y = (CAMERA_HEIGHT - this.mFaceTextureRegion.getHeight()) / 2;
        final Sprite face = new Sprite(x, y, this.mFaceTextureRegion);
        scene.registerTouchArea(face);
        scene.attachChild(face);
        //face.setPosition(134, 200);
        scene.setOnSceneTouchListener(new IOnSceneTouchListener() {
            @Override
            public boolean onSceneTouchEvent(Scene pScene,TouchEvent pSceneTouchEvent) {
                int facePosX = (int) (pSceneTouchEvent.getX() - face.getWidth() / 2);
                int facePosY = (int) (pSceneTouchEvent.getY() - face.getHeight() / 2);
                 face.registerEntityModifier(new MoveModifier(1, face.getX(), facePosX,face.getY(), facePosY, EaseQuadIn.getInstance()));               
                 return false;
            }
        });

        scene.setTouchAreaBindingEnabled(true);
        return scene;
    }

    @Override
    public void onLoadComplete() {
    }
    // ===========================================================
    // Methods
    // ===========================================================
    // ===========================================================
    // Inner and Anonymous Classes
    // ===========================================================
}

最新更新