鼠标点击和移动事件在生成的第二部分上不起作用

我正在开发一个玩家点击一个物体并走到它那里的项目,等待一秒钟,然后从游戏中删除该物体并在排行榜上更新分数。问题是它只在第一轮中起作用。第二次,新的部分生成,并且它的子级确实具有ClickDetector,但不起作用。

local flowers = game.ReplicatedStorage.Flowers.level1:GetChildren()
local selection = math.random(1,#flowers)
local Clone = flowers[selection]:Clone()

local ClickDetector = Instance.new("ClickDetector")
ClickDetector.Parent = Clone
ClickDetector.MaxActivationDistance = 500

local spawners = workspace.Spawners.level1:GetChildren()
local spawnSelection = math.random(1,#spawners)
local spawner = spawners[spawnSelection]

while true do

    wait(1)
    if Clone.Parent == nil then
        Clone.Parent = workspace.Flowers.level1
        Clone.CFrame = spawner.CFrame + Vector3.new(math.random(-5,5),1,math.random(-5,5))
        print("Clone added")

        ClickDetector.MouseClick:Connect(function(playerWhoClicked)
            playerWhoClicked.Character.Humanoid:MoveTo(Clone.Position,Clone)
            print("clicked")

            wait(1)

            Clone:Remove()
            print("Clone removed")

            local flowerValue = playerWhoClicked.leaderstats.Flowers
            local coinsValue = playerWhoClicked.leaderstats.Coins
            flowerValue.Value = flowerValue.Value + 1
            coinsValue.Value = coinsValue.Value + 5
        end)
    end

end

输出中没有错误消息。只是在新生成的部分上,“clicked”没有打印出来。

点赞
用户10193967
用户10193967
local flowers = game.ReplicatedStorage.Flowers.level1:GetChildren()
local selection = math.random(1,#flowers)
local Clone = flowers[selection]:Clone()

local ClickDetector = Instance.new("ClickDetector")
ClickDetector.Parent = Clone
ClickDetector.MaxActivationDistance = 500

local spawners = workspace.Spawners.level1:GetChildren()
local spawnSelection = math.random(1,#spawners)
local spawner = spawners[spawnSelection]

while true do

    wait(1)
    if Clone.Parent == nil then
        Clone.Parent = workspace.Flowers.level1
        Clone.CFrame = spawner.CFrame + Vector3.new(math.random(-5,5),1,math.random(-5,5))
        print("Clone added")
    end

end

ClickDetector.MouseClick:Connect(function(playerWhoClicked)
    _clone = Clone:Clone()
    playerWhoClicked.Character.Humanoid:MoveTo(_clone.Position,_clone)
    print("clicked")

    wait(1)

    _clone:Destroy()
    print("_clone removed")

    local flowerValue = playerWhoClicked.leaderstats.Flowers
    local coinsValue = playerWhoClicked.leaderstats.Coins
    flowerValue.Value = flowerValue.Value + 1
    coinsValue.Value = coinsValue.Value + 5
})

以下是翻译:

local flowers = game.ReplicatedStorage.Flowers.level1:GetChildren()  -- 存储在ReplicatedStorage中的Flowers的level1子目录下的所有子项
local selection = math.random(1,#flowers)  -- 随机从flowers中选择一个
local Clone = flowers[selection]:Clone()  -- 复制该选择项,存储在Clone中

local ClickDetector = Instance.new("ClickDetector")  -- 创建一个点击检测器
ClickDetector.Parent = Clone  -- 将点击检测器放在Clone上
ClickDetector.MaxActivationDistance = 500  -- 设置最大激活距离

local spawners = workspace.Spawners.level1:GetChildren()  -- 存储在Workspace中的Spawners的level1子目录下的所有子项
local spawnSelection = math.random(1,#spawners)  -- 随机从spawners中选择一个
local spawner = spawners[spawnSelection]  -- 存储选中的spawner

while true do  -- 循环

    wait(1)  -- 等待一秒
    if Clone.Parent == nil then  -- 如果Clone不在Parent中
        Clone.Parent = workspace.Flowers.level1  -- 将Clone放在Workspace中的Flowers的level1子目录下
        Clone.CFrame = spawner.CFrame + Vector3.new(math.random(-5,5),1,math.random(-5,5))  -- 设置Clone的位置
        print("Clone added")  -- 输出信息
    end

end

ClickDetector.MouseClick:Connect(function(playerWhoClicked)  -- 为ClickDetector的MouseClick事件连接一个函数
    _clone = Clone:Clone()  -- 复制Clone,存储在_clone中
    playerWhoClicked.Character.Humanoid:MoveTo(_clone.Position,_clone)  -- 设置角色移动到_clone的位置
    print("clicked")  -- 输出信息

    wait(1)  -- 等待一秒

    _clone:Destroy()  -- 销毁_clone
    print("_clone removed")  -- 输出信息

    local flowerValue = playerWhoClicked.leaderstats.Flowers  -- 获取玩家的Flowers值
    local coinsValue = playerWhoClicked.leaderstats.Coins  -- 获取玩家的Coins值
    flowerValue.Value = flowerValue.Value + 1  -- 将Flowers值加1
    coinsValue.Value = coinsValue.Value + 5  -- 将Coins值加5
end)
2019-05-30 15:56:27
用户2860267
用户2860267

你的问题在于 ClickDetector 中的函数正在使用对 Clone 的引用,当 Clone 被销毁时,它将不再存在。如果你的代码只是在世界中解除它的父对象关系而不是销毁它,那么它就可以正常工作。

-- 选择一个随机的花并克隆它
local flowers = game.ReplicatedStorage.Flowers.level1:GetChildren()
local selection = math.random(1,#flowers)
local Clone = flowers[selection]:Clone()

-- 将 ClickDetector 配置到克隆的花上
local ClickDetector = Instance.new("ClickDetector")
ClickDetector.Parent = Clone
ClickDetector.MaxActivationDistance = 500
ClickDetector.MouseClick:Connect(function(playerWhoClicked)
    -- 当玩家点击花朵时,将玩家移动到该位置
    playerWhoClicked.Character.Humanoid:MoveTo(Clone.Position,Clone)
    print("clicked")

    -- 将克隆的花从工作区中移除,但不销毁它
    wait(1)
    Clone.Parent = nil -- << 仅将其从世界中隐藏

    -- 授予玩家一些分数
    local flowerValue = playerWhoClicked.leaderstats.Flowers
    local coinsValue = playerWhoClicked.leaderstats.Coins
    flowerValue.Value = flowerValue.Value + 1
    coinsValue.Value = coinsValue.Value + 5
end)

-- 选择一个随机的生成位置
local spawners = workspace.Spawners.level1:GetChildren()
local spawnSelection = math.random(1,#spawners)
local spawner = spawners[spawnSelection]

-- 开始一个循环将花安置到世界中
while true do

    wait(1)
    -- 如果花不可见,请将其放置在特定位置附近
    if Clone.Parent == nil then
        Clone.Parent = workspace.Flowers.level1
        Clone.CFrame = spawner.CFrame + Vector3.new(math.random(-5,5),1,math.random(-5,5))
        print("Clone added into the world")

        -- 等待玩家点击它并将其解除父对象关系。
        -- 这种情况将在一秒后重新出现,并将重新添加。
    end

end

这样,你就不必担心花的第二个或第三个生成,因为只会有一个花。

2019-05-31 01:47:18