2012-02-19 2 views
2

이 터치 이벤트는 절대 발생하지 않습니다. 필자는 예제와 소스 코드를 살펴 보았고, 지금 내가 원하는 것을 수행하는 최선의 방법에 약간 혼란 스럽다.andEngine에서 터치 리스너/이벤트 및 완화 기능을 올바르게 사용하는 방법

장면에 스프라이트를 그립니다. 그 스프라이트가 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);

모든 설명이 유용 할 것입니다. 감사합니다.

+0

답변을 찾았습니다. 그러나 나는 새롭다. 그래서 나는 내 자신의 게시물에 대답하기 위해 4 시간을 기다려야한다. –

답변

3

이 작품! 파기를 계속하고 여기서 답을 찾았습니다. 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 
    // =========================================================== 
} 
관련 문제