Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 大炮转速_Lua_Coronasdk - Fatal编程技术网

Lua 大炮转速

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

在我正在制作的当前应用程序中,我使用加农炮向目标射击,但加农炮旋转太快。当我触摸屏幕时,大炮以逆时针方向快速旋转,我想降低旋转速度。我将角度阻尼设置为100,但速度似乎没有一点变化

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