5

I am working on a game in AndEngine. In that I am able to move an Object in Right to Left, Top to Bottom and vice-versa. But, my issue is that how can I move the Sprite object in the Direction of Fling? It means if users Fling's in any direction the Sprite Object should move on the co-ordinates of the fling and should move on.

If anyone can suggest about, how to get the exact X and Y co-ordinates would also do, I can manage to move the Sprite Object myself on the co-ordinates.

You can also see the VIDEO - Pirates Subs

In the video the Launcher coming on the FLING is what I am looking for, from any direction.

Thanks in Advance. Suri Sahani.

Lalit Poptani
  • 67,150
  • 23
  • 161
  • 242
  • don't know exactly but the key down coordinates and key up coordinates can determine that there is a fling or drag kind of thing at those coordinates.......... – viv Sep 07 '11 at 05:18
  • It's about Maths try to find slop and theta. – Siten Sep 16 '11 at 10:42

2 Answers2

4

Well, you can try this code.....

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

c = y1 - (slope * x1);

onFling() method look's like this, for all direction.

@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;
}
Siten
  • 4,515
  • 9
  • 39
  • 64
  • Can you help me for this question . http://stackoverflow.com/questions/20540858/how-to-throw-fling-the-ball-by-swiping-on-it-using-andengine/20549429?noredirect=1#20549429 – Uday Dec 13 '13 at 06:24
0

I created this based on the example above:

ublic abstract class OnUpDownGestureListener implements 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();

}

Deivison Sporteman
  • 2,334
  • 1
  • 19
  • 22