【问题标题】:Touched function Roblox Studio触摸功能 Roblox Studio
【发布时间】:2020-04-13 14:40:09
【问题描述】:

我正在 Roblox Studio 上编写一个 obby。在这个 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 秒内走过它,让玩家有时间行走而不恢复颜色。这是正确的方法吗,如果是,我将如何去做。是否可以覆盖触摸的功能?

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

【问题讨论】:

    标签: lua overriding touch-event roblox


    【解决方案1】:

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

    1. 可以将其调整为低于TouchedTouchEnded 的敏感度,因为不需要直接接触平台,只要玩家在平台上方的某个小区域内即可。

    2. 它可以处理多个玩家。如果你连接TouchEnded重置颜色,那么如果两个玩家站在平台上,一个离开,即使有玩家站在平台上,颜色也会被重置。通过检查平台上方区域是否为空,只有当所有玩家离开平台时,颜色才会被重置。

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

    【讨论】:

    • 当我运行它时,它只运行一次。如何让它像活动一样运行?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 2016-02-28
    • 1970-01-01
    • 2013-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多