Lua 大炮转速
在我正在制作的当前应用程序中,我使用加农炮向目标射击,但加农炮旋转太快。当我触摸屏幕时,大炮以逆时针方向快速旋转,我想降低旋转速度。我将角度阻尼设置为100,但速度似乎没有一点变化Lua 大炮转速,lua,coronasdk,Lua,Coronasdk,在我正在制作的当前应用程序中,我使用加农炮向目标射击,但加农炮旋转太快。当我触摸屏幕时,大炮以逆时针方向快速旋转,我想降低旋转速度。我将角度阻尼设置为100,但速度似乎没有一点变化 function charge() cannon.angularDamping = 100 cannon.rotation = cannon.rotation - 5 impulse=impulse-0.2 if(cannon.rotation < -46) then
function charge()
cannon.angularDamping = 100
cannon.rotation = cannon.rotation - 5
impulse=impulse-0.2
if(cannon.rotation < -46) then
cannon.rotation = -46
impulse = -3.2
end
end
功能费用()
cannon.angular阻尼=100
cannon.rotation=cannon.rotation-5
脉冲=脉冲-0.2
如果(加农炮旋转<-46),则
旋转角度=-46
脉冲=-3.2
终止
终止
角度阻尼
降低物理物体的角速度
如果直接设置躯干旋转,它将不起任何作用
尝试使用佳能:applyAngularImpulse(-5),旋转它,看看角度阻尼如何降低旋转速度。不要手动触摸旋转
您还可以使用马达或旋转接头精确控制火炮旋转。火炮当前的旋转速度为每帧5度(假设您调用
charge()
作为enterFrame
处理程序的一部分),因为您有:
cannon.rotation = cannon.rotation - 5
因此,如果希望它旋转得更慢,请尝试以下任一操作:
local degreesPerFrame = 1 -- or 0.1 or whatever, try several
cannon.rotation = cannon.rotation - degreesPerFrame
如果需要特定速度,则可以通过event.time-appStartTime
获取自上次enterFrame
以来的时间。那你就用
function enterFrame(event)
if appStartTime == nil then
appStartTime = event.time
else
deltaTime = event.time - appStartTime
charge(deltaTime)
end
end
function charge(deltaTime)
local degreesPerSec = 1 -- or 0.1 or whatever, try several
cannon.rotation = cannon.rotation - degreesPerSec * deltaTime
...
end
或者,可以将对象设置为运动学物理体(注意:非动力学):
然而,您的代码中似乎有动态。如果您的对象是“动态”物理对象(使用“动态”而不是“运动学”创建),则必须应用扭矩才能使其转动。恒定扭矩将导致非零角加速度,即只要施加扭矩,就会导致角速度增加,除非存在速度相关阻尼,否则通常存在一个最大值,其中阻尼精确抵消扭矩,并且物体达到稳定角速度
使用动态对象将使您进行更平滑、更真实的更改,但在使用加农炮的情况下可能会有过大的杀伤力。我会坚持使用运动学,或者根本不使用物理学,只是更改旋转值 你是把大炮当作物体还是物理物体来移动?角度阻尼处理物理引擎中使用的对象。
physics.addBody(cannon, "kinematic", {isSensor = false})
cannon.angularVelocity = 1 -- deg/s