感动功能Roblox Studio

问题描述 投票:0回答:2

我正在 Roblox Studio 上编写 obby。在这个大厅中,我有角色可以跳跃的部件(这些部件大约是 10 x 10 颗螺柱)。

我想实现当角色位于某个部分时,该部分会改变颜色。

local platform = script.parent

local function changeColor(part)
   local humanoid = part.Parent:FindFirstChild(‘Humanoid’)
   if humanoid then 
   part.BrickColor = BrickColor.new(‘Bright red’)
   end
end

local function restoreColor(part)
   local humanoid = part.Parent:FindFirstChild(‘Humanoid’)
   if humanoid then 
   part.BrickColor = BrickColor.new(‘Grey’)
   end
end

platform.Touched:connect(changeColor)
platform.TouchEnded:connect(restoreColor)

这样做的问题是,当角色在该部件上行走时,该部件会随着每一步从灰色变为红色,然后再变回来。我希望该部分在玩家停留期间保持红色。所以我希望该函数检查玩家是否在最后 0.5 秒内走过它,以便让玩家有时间行走而不恢复颜色。这是正确的方法吗?如果是,我将如何去做。是否可以覆盖触摸的功能?

这就是它的样子(我后来稍微更改了代码,包括颜色等......但根本问题仍然存在)

enter image description here

lua overriding touch-event roblox
2个回答
2
投票

您可以尝试使用 IsRegion3Empty 函数,该函数应该更可靠地返回是否有任何玩家站在平台正上方。它有两个优点:

  1. 它可以调整为比

    Touched
    TouchEnded
    更不敏感,因为不需要直接接触平台,只要玩家在平台上方的某个小区域内即可。

  2. 它可以处理多个玩家。如果您要连接

    TouchEnded
    来重置颜色,那么如果两名玩家站在平台上,其中一名玩家离开,即使还有一名玩家站在平台上,颜色也会重置。通过检查平台上方的区域是否为空,只有当所有玩家离开平台时才会重置颜色。

任意零件进入该区域时,上述方法将会触发。要将其限制为玩家,您可以使用 FindPartsInRegion3 函数并检查该零件是否具有 Humanoid 父级。


0
投票

使用去抖。去抖可以阻止事件或函数运行得太快。

local debounce=true
local part=script.Parent

local function changecolor()
      if debounce then
         debounce=false
         -- add color changing code here
         task.wait(2)
         debounce=true


Part.Touched:Connect(changecolor)

这使得该函数只能每两秒运行一次。

© www.soinside.com 2019 - 2024. All rights reserved.