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 无限旋转循环的主要内容,如果未能解决你的问题,请参考以下文章