我正在开发AndEngine的游戏.在那里我能够从右到左,从上到下移动一个对象,反之亦然.但是,我的问题是如何在Fling方向中移动Sprite对象?这意味着如果用户在任何方向上甩掉Sprite对象应该在fling的坐标上移动并且应该继续前进.
如果有人可以提出建议,如何获得精确的X和Y坐标也可以,我可以设法自己在坐标上移动Sprite对象.
您还可以看到VIDEO – Pirates Subs
在视频中,来自FLING的启动器是我正在寻找的,从任何方向.
提前致谢.
苏瑞萨哈尼.
最佳答案
好吧,你可以试试这个代码……
float slope = (y2 - y1) / (x2 - x1);
float angle = (float) Math.atan(slope);
float angleInDegree = (float) Math.todegrees(angle);
c = y1 - (slope * x1);
对于所有方向,onFling()方法看起来像这样.
@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,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,(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,this.mFaceTextureRegionMissileLeftToRight);
missile.setVeLocity((float) (-600 * (Math.cos(angle))),-(float) (600 * (Math.sin(angle))));
scene.getTopLayer().addEntity(missile);
missile.setRotation(angleInDegree + 180);
}
return false;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。