タッチリスナー/イベントを正しく使用する方法とアンディエンジンで機能を容易にする方法

StackOverflow https://stackoverflow.com/questions/9346260

質問

このタッチイベントは発生することはありません。私は例とソースコードを調べてきましたが、今では私が望むことを行う最良の方法について少し混乱しています。

シーンにスプライトを描きます。そのスプライトは、ユーザータッチイベントの座標に簡単な機能を持って移動したいと思います。

これはこれまでのところコードです。

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/tuturials/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
    // ===========================================================
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top