Comment déplacer un sprite dans la direction Fling / Swipe (Diagonale) en utilisant AndEngine

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

  •  27-10-2019
  •  | 
  •  

Question

Je travaille sur un jeu en AndEngine. Dans ce que je suis capable de déplacer un objet dans Right to Left, Top to Bottom et vice-versa. Mais, mon problème est que comment puis-je déplacer l'objet Sprite dans le Direction of Fling? Cela signifie que si les utilisateurs Fling est dans une direction l'objet Sprite devrait se déplacer sur les coordonnées du Fling et doivent passer.

Si quelqu'un peut suggérer au sujet, comment obtenir le X and Y co-ordinates exacte serait également faire, je peux gérer moi-même de se déplacer l'objet Sprite sur les coordonnées.

Vous pouvez également voir le VIDEO - Pirates Subs

Dans la vidéo Launcher à venir sur le FLING est ce que je cherche, dans toutes les directions.

Merci à l'avance. Suri Sahani.

Était-ce utile?

La solution

Eh bien, vous pouvez essayer ce code .....

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

c = y1 - (slope * x1);

voir la méthode onFling () est comme ça, pour toutes les directions.

@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;
}

Autres conseils

J'ai créé ce basé sur l'exemple ci-dessus:

OnUpDownGestureListener ublic classe abstraite outils 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();

}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top