修复后仍触发新错误的问题——Roblox Studio
Roblox击杀分数统计报错修复方案
报错原因分析
你遇到的两个报错根源是变量混淆了IntValue实例和数值本身:
- 初始时
enemies_killed指向的是StarterGui里的IntValue实例,第一次执行enemies_killed = enemies_killed.Value + 1后,变量变成了数字 - 第二次循环时再访问
enemies_killed.Value,就会触发“Attempt to index number with 'Value'”;如果没覆盖变量直接加,又会出现“Attempted to add Instance and Number”,因为直接把实例和数字相加了
另外还有两个隐藏问题:
- 循环会重复触发加分:NPC死亡后每0.1秒就加一次分
- 修改StarterGui的模板不会同步到玩家的实际界面,应该操作玩家的PlayerGui
修正后的代码
-- 获取NPC的Humanoid,提前缓存避免重复查找 local humanoid = script.Parent:WaitForChild("Humanoid") -- 标记是否已经统计过击杀,防止重复加分 local hasCounted = false -- 监听Humanoid的死亡事件,比循环检测更高效 humanoid.Died:Connect(function() if hasCounted then return end hasCounted = true -- 找到击杀该NPC的玩家(如果需要验证击杀者) local killer = humanoid:GetLastDamageDealer() if not killer or not killer:IsA("Player") then return end -- 从玩家的PlayerGui中获取分数控件,而不是StarterGui local playerGui = killer.PlayerGui local enemiesKilledValue = playerGui:WaitForChild("Enemies Defeated"):WaitForChild("Frame"):WaitForChild("enemydefeatednum"):WaitForChild("enemies_killed") -- 修改IntValue的Value属性,不要覆盖实例引用 enemiesKilledValue.Value = enemiesKilledValue.Value + 1 print("击杀分数更新为:", enemiesKilledValue.Value) end)
关键改动说明
- 用
Humanoid.Died事件替代循环检测:更高效,不会重复执行 - 新增
hasCounted标记:确保每个NPC只统计一次击杀 - 从玩家的
PlayerGui获取控件:StarterGui是模板,修改它不会影响玩家的实际界面 - 区分实例和数值:始终通过
enemiesKilledValue.Value来访问和修改分数,不覆盖实例引用 - 增加击杀者验证:确保只有造成致命伤害的玩家才会加分(如果不需要可以去掉这部分)
内容的提问来源于stack exchange,提问作者polarshark123
相关产品推荐
相关产品推荐

