鼠标点击和移动事件在生成的第二部分上不起作用
2019-5-30 5:23:22
收藏:0
阅读:74
评论:2
我正在开发一个玩家点击一个物体并走到它那里的项目,等待一秒钟,然后从游戏中删除该物体并在排行榜上更新分数。问题是它只在第一轮中起作用。第二次,新的部分生成,并且它的子级确实具有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”没有打印出来。
点赞
用户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
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

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)