1

我想问一下在物体旋转的方向上移动物体的正确方法是什么?

现在我有:

    local ang = body:getAngle() * 180 / 3.14      /// get body's rotation in degrees
    local x, y = body:getPosition();      /// get current position
    ang = ang%360

    x = x + math.sin(ang) 
    y = y + math.cos(ang)

    print(ang)

    body:setPosition(x,y)

然而身体的动作却很诡异。任何想法我做错了什么?

谢谢

4

2 回答 2

3

您需要以弧度为单位的角度,并对 x 值使用余弦函数,对 y 值使用正弦函数。lua 中的这个函数(未经测试)看起来像这样:

function moveAlongAngle(body, angleInRadians, dt, speedVector)
    local x, y = body:getPosition()
    x = x + math.cos(angleInRadians) * dt * speedVector.x
    y = y + math.sin(angleInRadians) * dt * speedVector.y
    body:setPosition(x,y)
end

这是因为您将角度从极坐标转换为笛卡尔坐标:http ://en.wikipedia.org/wiki/Polar_coordinate_system#Converting_between_polar_and_Cartesian_coordinates

于 2013-01-21T12:54:17.427 回答
0

你正在混合弧度和度数。首先,您将角度转换为弧度,但之后您尝试使用模数对度数进行归一化。你不需要归一化,因为 sin 和 cos 是周期函数。

math.sin 和 math.cos 实际上期望以弧度而不是度为单位的角度,因此您需要除以 180 并乘以 pi。

这当然是假设您的初始变量 ang 以度为单位。

于 2013-01-21T12:31:40.837 回答