2015-12-20 3 views
1

Мне нужна помощь. В принципе у меня есть этот код:Скрипт Roblox работает несколько раз?

local plyIsEntered = false 

function onTouched(hit) 

plyIsEntered = true 

if not plyIsEntered then 

end 

if plyIsEntered then 

    local humanoid = hit.Parent:FindFirstChild("Humanoid") 
    local ply = humanoid.Parent 
    if humanoid ~= nil then 

     print("Hit") 
     local playerName = hit.Parent.Name 
     print(playerName) 
     local laserEmitter = game.Workspace["Enterance PC"]:FindFirstChild("laserEmitter") 

     local scanLaser = Instance.new("Part", game.Workspace) 

     scanLaser.Position = laserEmitter.Position 
     scanLaser.Name = "ScanLaser" 
     scanLaser.Size = Vector3.new(1,1,1) 
     local scanLaserMesh = Instance.new("SpecialMesh", game.Workspace.ScanLaser) 
     scanLaserMesh.Name = "Cone mesh" 
     scanLaserMesh.MeshType = "" 
     plyIsEntered = false 


     end 

    end 



end 

script.Parent.Touched:connect(onTouched) 

Теперь я проверяю, если игрок касается коробки, то не имеет столкновений и невидим; когда они это делают, я хочу создать лазер, который сканирует их и откроет дверь. Проблема, с которой я сталкиваюсь, - это когда я вхожу в триггерный блок, он создает 8 или 9 блоков. Один из этих блоков - это блок, который я тоже применяю.

Что мне нужно сделать, это убедиться, что он работает только один раз и не создает более одного кирпича. Надеюсь, кто-то может мне помочь!

+0

Для сона странной причине она не позволит мне изменить ... Вам нужно исправить форматирование кода. Также не забывайте, что у roblox есть собственный форум сценаристов, которые помогают в этом. Совет в сторону, .Touched пожары LOT, так что вы должны смотреть на debounce. wiki.roblox.com/index.php?title=Debounce – warspyking

ответ

1

Я считаю, что исправить это, вам нужно добавить отладку.

Вы видите, что затронутое событие Части действительно срабатывает много раз, поэтому ваш код будет выполняться несколько раз, если он находится внутри события.

Чтобы исправить это, мы используем debounce, что означает, что ваш код не будет выполняться, если ваша часть слишком сильно затронута в один и тот же временной интервал. Вот пример:

local debounce = false 

part.Touched:connect(function() 
    if debounce == false then 
    debounce = true 
    --Your code goes here. 
    wait(1)--Wait one second until you'll be able to execute the code again. 
    debounce = false 
    end 
end) 

Чтобы узнать больше о debounces: http://wiki.roblox.com/index.php?title=Debounce