2011-09-06 17 views
5

Estoy trabajando en un juego en AndEngine. En eso puedo mover un Objeto en Right to Left, Top to Bottom y viceversa. Pero, mi problema es que ¿cómo puedo mover el objeto Sprite en el Direction of Fling? Significa que si los usuarios navegan en cualquier dirección, el Objeto Sprite debería moverse sobre las coordenadas de la aventura y debería avanzar.Cómo mover un Sprite en dirección Fling/Swipe (en diagonal) con AndEngine

Si alguien puede sugerir acerca de cómo obtener exactamente el X and Y co-ordinates, también puedo mover el Objeto Sprite yo mismo en las coordenadas.

También puede ver el VIDEO -Pirates Subs

En el video del Launcher viene en el FLING es lo que estoy buscando, desde cualquier dirección.

Gracias de antemano. Suri Sahani.

+0

no saben exactamente pero la llave hacia abajo y coordenadas las coordenadas de las teclas pueden determinar que hay un tipo de cosas arrojadizas o de arrastre en esas coordenadas .......... – viv

+0

Se trata de las matemáticas intentar aletear d slop y theta. – Siten

Respuesta

4

método
float slope = (y2 - y1)/(x2 - x1); 
float angle = (float) Math.atan(slope); 
float angleInDegree = (float) Math.toDegrees(angle); 

c = y1 - (slope * x1); 

onFling()

Bueno, se puede probar este código ..... interfaz de este tipo, para todas las direcciones.

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) { 

float c; 
// Checks if LifeLine is there or not and enable or disable Fling 
// Operation. 
float sx = 0, sy = 0; 
float x1 = e1.getX(); 
float y1 = e1.getY(); 

float x2 = e2.getX(); 
float y2 = e2.getY(); 

float slope = (y2 - y1)/(x2 - x1); 
float angle = (float) Math.atan(slope); 
float angleInDegree = (float) Math.toDegrees(angle); 

c = y1 - (slope * x1); 

/** 
* bottom right to left top 
*/ 
if (x1 > x2 && y1 > y2) { 
sx = CAMERA_WIDTH; 
sy = (slope * sx) + c; 

missile = new Missile(sx, sy, 
this.mFaceTextureRegionMissileLeftToRight); 
missile.setVelocity(-(float) (600 * (Math.cos(angle))), 
-(float) (600 * (Math.sin(angle)))); 

scene.getTopLayer().addEntity(missile); 

missile.setRotation(angleInDegree + 180); 

} 
/** 
* left top corner to right 
*/ 
else if (x2 > x1 && y2 > y1) { 
sx = -100; 
sy = (slope * sx) + c; 
missile = new Missile(sx, sy, 
this.mFaceTextureRegionMissileLeftToRight); 
missile.setVelocity((float) (300 * (Math.cos(angle))), 
(float) (300 * (Math.sin(angle)))); 
scene.getTopLayer().addEntity(missile); 
missile.setRotation(angleInDegree); 
} 
/** 
* left bottom corner to right up 
*/ 
else if (x2 > x1 && y1 > y2) { 
sx = -100; 
sy = (slope * sx) + c; 
missile = new Missile(sx, sy, 
this.mFaceTextureRegionMissileLeftToRight); 
missile.setVelocity((float) (300 * (Math.cos(angle))), 
(float) (300 * (Math.sin(angle)))); 
scene.getTopLayer().addEntity(missile); 
missile.setRotation(angleInDegree); 
} 

/** 
* Right corner to left bottom down 
*/ 
else if (x1 > x2 && y2 > y1) { 
sx = CAMERA_WIDTH; 
sy = (slope * sx) + c; 
missile = new Missile(sx, sy, 
this.mFaceTextureRegionMissileLeftToRight); 
missile.setVelocity((float) (-600 * (Math.cos(angle))), 
-(float) (600 * (Math.sin(angle)))); 
scene.getTopLayer().addEntity(missile); 
missile.setRotation(angleInDegree + 180); 
} 
return false; 
} 
+0

¿Puede ayudarme con esta pregunta? http://stackoverflow.com/questions/20540858/how-to-throw-fling-the-ball-by-swiping-on-it-using-andengine/20549429?noredirect=1#20549429 – Uday

0

que creó esta basado en el ejemplo anterior:

ública OnUpDownGestureListener clase abstracta implementa OnTouchListener {

private final GestureDetector gdt = new GestureDetector(new GestureListener()); 

@Override 
public boolean onTouch(final View v, final MotionEvent event) { 
    gdt.onTouchEvent(event); 
    return true; 
} 

private final class GestureListener extends SimpleOnGestureListener { 


    @Override 
    public boolean onSingleTapConfirmed(MotionEvent e) { 
     click(); 
     return true; 
    } 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 

     float x1 = e1.getX(); 
     float y1 = e1.getY(); 

     float x2 = e2.getX(); 
     float y2 = e2.getY(); 


     /** 
     * bottom right to left top 
     */ 
     if (x1 > x2 && y1 > y2) { 
      onBottomToTop(); 

     } 
     /** 
     * left top corner to right 
     */ 
     else if (x2 > x1 && y2 > y1) { 
      onTopToBottom(); 
     } 
     /** 
     * left bottom corner to right up 
     */ 
     else if (x2 > x1 && y1 > y2) { 
      onBottomToTop(); 
     } 

     /** 
     * Right corner to left bottom down 
     */ 
     else if (x1 > x2 && y2 > y1) { 
      onTopToBottom(); 
     } 
     return false; 
    } 
} 

public abstract void onRightToLeft(); 

public abstract void click(); 

public abstract void onLeftToRight(); 

public abstract void onBottomToTop(); 

public abstract void onTopToBottom(); 

}

Cuestiones relacionadas