0

我想让一个形状从中间底部移动到我正在触摸的点。问题是解决触摸点的角度(或度数?)。

float angle = ?
float power = calculatePower(touchY);
Vec2 impulse = new Vec2(angle, power);
Vec2 point = body.getWorldCenter(); // to prevent rotation of shape
body.applyLinearImpulse(impulse, point);

有人有建议吗?

编辑:已解决

感谢安德鲁斯的回答。这是工作代码:

Point delta = new Point(touchX - bodyX, touchY - bodyY);
double angle = Math.atan2(delta.y, delta.x);
Vec2 direction = new Vec2((float)Math.cos(angle), (float)-Math.sin(angle));
float power = calculatePower(touchY);
Vec2 impulse = new Vec2(power * direction.x, power * direction.y);
Vec2 point = body.getWorldCenter();
body.applyLinearImpulse(impulse, point);
4

1 回答 1

1

伪代码如下所示。atan2是标准数学函数

Vec2 delta  = touchPoint - body.position;
float angle = math.atan2(delta.y, delta.x);

这条线Vec2 impulse = new Vec2(angle, power);看起来很奇怪。您正在使用angleasx值和poweras y。这没有多大意义。我认为您的目标是powerangle. 在这种情况下,代码应如下所示:

Vec2 dir     = Vec2(math.cos(angle), math.sin(angle));
Vec2 impulse = power * dir;

但是由于delta并且dir仅在大小上有所不同,因此您可以将冲量的计算简化为:

Vec2 delta   = touchPoint - body.position;
Vec2 dir     = delta.normalize();
Vec2 impulse = power * dir
于 2013-09-19T19:26:31.753 回答