android atan2,Android - Math.atan2的问题

所以在我的Android游戏中,我使用andengine创建了一个触摸并拖动玩家精灵的方法,它不断旋转,以便角色总是面向它的方向正在旅行。Android - Math.atan2的问题

public class Player extends AnimatedSprite {

private float lastX = Game.centerX;

private float lastY = Game.centerY;

private static int angle = 0;

// ...

@Override

public boolean onAreaTouched(final TouchEvent sceneTouchEvent, final float touchAreaLocalX, final float touchAreaLocalY) {

Body body = OrbCatch.physicsWorld.getPhysicsConnectorManager().findBodyByShape(this);

if (sceneTouchEvent.getAction() == TouchEvent.ACTION_MOVE) {

float currentX = sceneTouchEvent.getX();

float currentY = sceneTouchEvent.getY();

angle = (int) (Math.atan2(currentY - lastY, currentX - lastX) * 180/Math.PI);

lastX = currentX;

lastY = currentY;

}

body.setTransform(new Vector2(sceneTouchEvent.getX(),sceneTouchEvent.getY())

.mul(1/PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT),angle);

return true;

}

}

关键线路是这样的:

angle = (int) (Math.atan2(currentY - lastY, currentX - lastX) * 180/Math.PI)

它需要最后一个已知的坐标和当前坐标,计算它们之间的角度,并从弧度到度转换它。那么,昨天这一切都很正常,但尽管今天没有改变这些代码,但它表现得很奇怪。精灵的方向变化不规律,没有明显的图案。如果我在直线路径上移动它,它会连续在2或3个明显不同的角度之间交替(通常其中一个是正确的)。

编辑:解决,见下文

2011-05-18

herpderp

+1

你的'Body'是否有被多个线程同时访问的机会? –

2011-05-18 06:46:08

+0

...我的系统中数据集的结果是90°...!? –

2011-05-18 06:49:20

+0

我与sje397;我的猜测是'lastX'和'lastY'正在从你的下面改变。 –

2011-05-18 06:51:46

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值