So verwenden Sie den Touch -Listener/Ereignis und erleichtern die Funktion in Andengine
-
27-10-2019 - |
Frage
Dieses Touch -Ereignis feuert nie. Ich habe die Beispiele und Quellcodes durchgemacht und bin jetzt etwas verwirrt über die beste Methode, was ich will.
Ich zeichne ein Sprite zur Szene. Ich möchte, dass sich dieses Sprite mit einer Leichtigkeit zu den Koordinaten des Benutzersuchereignisses bewegt.
Dies ist der bisherige Code:
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);
// Hier versuche ich, den Touch -Listener und den Code zu implementieren // Ist es richtig?
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() {
}
Schließlich bin ich mir ziemlich sicher, dass ich pscene.registerToucharea (Gesicht) verwenden muss; und pscene.settouchareabindingenabled (true);
Jede Klärung wäre von großem Nutzen. Danke
Lösung
das funktioniert! Ich habe gerade weiter gegraben und die Antwort hier gefunden: http: //www.andengine.org/forums/tutorials/touchevent-t1490.html
Hier ist der ausgefüllte Code. Das Sprite lädt in die Mitte der Seite. Wo immer Sie auf das Sprite klicken, wird Ihre Touch -Koordinaten "tween" oder Ihre Berührungskoordinaten erleichtern.
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
// ===========================================================
}