如何使物体朝旋转方向移动?

我想问一下,在角度旋转后,将一个对象向旋转的方向移动的正确方法是什么?

我目前拥有的代码为:

    local ang = body:getAngle() * 180 / 3.14      /// 获取物体的旋转角度(以度为单位)
    local x, y = body:getPosition();      /// 获取当前位置
    ang = ang%360

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

    print(ang)

    body:setPosition(x,y)

然而物体非常奇怪地移动。有什么想法我在做错什么吗?

谢谢

点赞
用户1191373
用户1191373

你混淆了弧度和角度。首先将你的角度转换成弧度,但之后你尝试使用取模运算规范化角度。但实际上不需要规范化,因为正弦和余弦是周期函数。

math.sin和math.cos实际上期望以弧度而不是角度表示角度,因此你需要将角度除以180并乘以π。

当然,这是基于你的初始变量ang以角度为单位的假设。

2013-01-21 12:31:40
用户1997085
用户1997085

你需要将角度转换为弧度,并使用余弦函数来获取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

这是因为你需要将极坐标系中的角度转换成直角坐标系中的x和y坐标:http://en.wikipedia.org/wiki/Polar_coordinate_system#Converting_between_polar_and_Cartesian_coordinates

2013-01-21 12:54:17