Clamp player thrust influence

如何进行限制推力的影响:

_示例:火箭可以在其旋转的方向上推进。只有爆炸可以将它推动超过其最高速度。我正在寻找的是一种理论而不是代码。

任何帮助将不胜感激。

已解决

编辑:最高速度由推力速度和摩擦力确定。

推力可以叠加到速度上,但当摩擦力大于推力速度时,就会达到最高速度。

 vx = (vx + fx) * fr -- 速度 = (速度 + 力) *摩擦
vy = (vy + fy) * fr

当速度足够高时,力的添加将被摩擦减去。

fr=0.9:很难看到最高速度

fr=0.6:易于看到最高速度

点赞
用户5893999
用户5893999

控制:向左,向右和推力

推进的最高速度可以通过摩擦力进行调整。

- 变量 -
玩家 = {
    frc = .95, -- 摩擦力
    acc = .05, -- 加速度
    max = .5, -- 最大加速度
    deg = 0, -- 以度表示的旋转角度
    rad = 0 -- 以弧度表示的旋转角度
    -- 顺时针旋转,0指向右侧
}

- 主要更新 -
function love.update()
    控制(玩家)
    应用速度(玩家)
end

- 更新 -
function 控制(a)
    如果 L 则 addRotation(a,-5) end
    如果 R 则 addRotation(a, 5) end
    如果 U 则 加推力(a) else 推力关闭(a) end
end
function 应用速度(a)
    -- 速度+力量
    a.vx = (a.vx + a.fx)* a.fr
    a.vy = (a.vy + a.fy)* a.fr
    -- 位置+速度
    a.x = a.x + a.vx
    a.y = a.y + a.vy
end

- 其他 -
function 加推力(a)
    加速(a)
    旋转距离(a)
end
function 推力关闭(a)
    a.f = 0 -- 力的整数用于将其转换为点(x,y)和(rad)
    a.fx = 0
    a.fy = 0
end
function addRotation(a,deg)
    a.deg = a.deg + deg
    a.rad = math.rad(a.deg) -- math.sin/cos函数使用弧度而不是度数
end
function 加速(a)
    a.f = a.f + a.acc
    如果 a.f > a.max 则 a.f = a.max end
end
function 旋转距离(a)
    -- 力的终点从玩家旋转
    a.fx = a.f *math.sin(a.rad)
    a.fy = a.f *math.cos(a.rad)
end
2016-04-19 07:16:57