Roblox 无限旋转循环

Posted

技术标签:

【中文标题】Roblox 无限旋转循环【英文标题】:Roblox infinite rotating loop 【发布时间】:2016-10-30 07:03:29 【问题描述】:

我正在为我的游戏为 Roblox 制作一个健康包。代码是完整的并且运行良好,但我希望健康包本身以一种很酷的方式缓慢旋转,所以这是我的代码,告诉我出了什么问题

local healthPack = script.Parent
local healAmount = 30
local cooldown = 5
local canHeal = true

local function handleTouch(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChild('Humanoid')
    if humanoid and canHeal then
        if game.Workspace.Player1.Humanoid.Health == 100 then

            print("You have enough health")

        else

        canHeal = false

        game.Workspace.HealthPack.Transparency = .75

            local currentHealth = humanoid.Health
            local newHealth = currentHealth + healAmount
            humanoid.Health = newHealth
            wait(cooldown)
            canHeal = true
            game.Workspace.HealthPack.Transparency = 0 

        end
    end
end

healthPack.Touched:connect(handleTouch)


while true do
    local currentRotationX = game.Workspace.HealthPack.Rotation.X
    --local currentRotationX = game.Workspace.HealthPack.Rotation.Y
    local currentRotationZ = game.Workspace.HealthPack.Rotation.Z

    game.Workspace.HealthPack.Rotation.X = currentRotationX + 10
    --game.Workspace.HealthPack.Rotation.Y = currentRotationY + 10  
    game.Workspace.HealthPack.Rotation.Z = currentRotationZ + 10

    wait(.5)
end 

【问题讨论】:

【参考方案1】:

试试下面的代码。为了正确地旋转一个对象(修改rotation属性通常不起作用,它类似于位置属性,它符合碰撞)你必须使用CFrame .

local x = 0
while true do
  game.Workspace.HealthPack.CFrame = game.Workspace.HealthPack.CFrame * CFrame.Angles(0, math.rad(x), 0)
  x = x + 1
  wait()
end

公平的免责声明,我有一段时间没有使用 RBX.Lua,所以这可能不是最好的方法。

【讨论】:

我建议在 ROBLOX Developer Wiki 上查找 CFrame。作为一个简短的描述,它是所有砖块中的一个属性,用于控制砖块的方向(旋转)和位置。旋转有点复杂,如果您想深入研究处理 CFrame 的旋转,我建议您至少了解一些基本几何知识。 还有另一个问题,我希望它以即时速度旋转,但是您的代码使它旋转得更快然后变慢,所以我们遇到了问题 你的意思是它开始很快,然后变慢?这听起来像是一个性能问题,由于其他脚本使用执行时间,代码无法以相同的速度执行旋转。您可以通过将旋转计算移动到本地脚本来解决此问题,并让该部分仅存在于玩家的相机对象中(如果这仍然是您使用本地部分的方式,我不确定这是否仍然是推荐的方法) . 所以我知道它不可能以恒定的速度移动 这不是真的。我建议您检查 ROBLOX Studio 客户端的 Script Performance 选项卡,并检查您的其他脚本之一是否使用了太多资源。如果某些关键任务脚本占用了过多的 CPU 时间,但无法提高效率,那么我建议将轮换脚本卸载到客户端处理(本地脚本)。【参考方案2】:
local runService = game:GetService("RunService")

runService.Heartbeat:Connect(function()
    script.Parent.Orientation += Vector3.new(0,0.2,0)
end)

您可以永久更改部件方向的 y 轴(或任何其他轴)以使用 runService.Heartbeat 缓慢旋转(而 True 循环但更快以实现更平滑的旋转)。

【讨论】:

以上是关于Roblox 无限旋转循环的主要内容,如果未能解决你的问题,请参考以下文章

javascript 香草旋转木马与无限循环

html 无限循环旋转木马(垂直或水平)

html 无限循环旋转木马(垂直或水平)

css3 实现动画效果,怎样使他无限循环动下去?

如何在特定点循环 ROBLOX 音频?

Roblox Studio 跳过循环