我想问一下在物体旋转方向上移动物体的正确方法是什么?
现在我有:
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)
然而身体移动非常奇怪。我有什么想法吗?
由于
答案 0 :(得分:2)
您需要以弧度为单位的角度,并使用余弦函数作为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
答案 1 :(得分:0)
math.sin和math.cos实际上是以弧度而不是以度为单位的角度,所以你需要偏离180并乘以pi。
这当然假设你的初始变量ang是度数。