Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Дверь в Roblox Studio

Даниил Мельников Ученик (238), закрыт 1 год назад
Я хочу сделать дверь в Roblox Studio с таким скриптом

local closed = script.Parent
local open = lava.Part
local function open(otherPart)
local partParent = otherPart.Parent
local humanoid = partParent:FindFirstChild("Humanoid")
if humanoid then
lava.Transparency = 1
lava.CanCollide = false
open.Transparency = 0
open.CanCollide = true
wait(3)
lava.CanCollide = true
lava.Transparency = 0
open.Transparency = 1
open.CanCollide = false
end
end

closed.Touched:Connect(open)

И вот, проблема. Если стоять в месте открытой двери то она начнет бешено открываться и закрываться. Как это исправить?
Лучший ответ
S.H.I. Оракул (68566) 1 год назад
Один из способов решения этой проблемы - это использование переменной debounce, чтобы предотвратить повторное открытие и закрытие двери. Вы можете добавить переменную debounce в начало вашего скрипта и установить ее значение на false. Затем, когда функция open вызывается, вы можете проверить значение debounce, и если оно равно false, то продолжить выполнение функции и установить значение debounce на true. После того, как дверь открылась и закрылась, вы можете установить значение debounce обратно на false, чтобы позволить двери снова открываться и закрываться. Вот пример того, как это может выглядеть:
 local debounce = false 
local closed = script.Parent
local open = lava.Part
local function open(otherPart)
if debounce == false then
debounce = true
local partParent = otherPart.Parent
local humanoid = partParent:FindFirstChild("Humanoid")
if humanoid then
lava.Transparency = 1
lava.CanCollide = false
open.Transparency = 0
open.CanCollide = true
wait(3)
lava.CanCollide = true
lava.Transparency = 0
open.Transparency = 1
open.CanCollide = false
end
debounce = false
end
end

closed.Touched:Connect(open)
Остальные ответы
MIKHAIL TSYBIN Знаток (394) 1 год назад
Проблема, описанная Даниилом, заключается в том, что при касании двери (или объекта) она начинает многократно открываться и закрываться. Это происходит из-за того, что каждый раз, когда дверь касается игрока, событие Touched активируется.

Чтобы решить эту проблему, можно ввести переменную-флаг, которая будет отслеживать, открыта ли дверь в данный момент или закрыта. Если дверь уже открыта, то дополнительные касания не будут вызывать повторное открытие.

Вот пример того, как это можно реализовать:
 local closed = script.Parent 
local open = lava.Part
local doorIsOpen = false -- флаг состояния двери

local function toggleDoor(otherPart)
local partParent = otherPart.Parent
local humanoid = partParent:FindFirstChild("Humanoid")
if humanoid then
if doorIsOpen then
-- Закрыть дверь
lava.Transparency = 0
lava.CanCollide = true
open.Transparency = 1
open.CanCollide = false
doorIsOpen = false
else
-- Открыть дверь
lava.Transparency = 1
lava.CanCollide = false
open.Transparency = 0
open.CanCollide = true
wait(3)
doorIsOpen = true
end
end
end

closed.Touched:Connect(toggleDoor)
Теперь, когда игрок касается двери, функция toggleDoor проверяет, открыта ли дверь. Если дверь открыта, она закрывается, и наоборот. Это предотвратит многократное открытие и закрытие двери при касании.
Даниил МельниковУченик (238) 1 год назад
Судя по всему это могло сработать, но дверь не закрывается после открытия.
Даниил Мельников Ученик (238) Даниил Мельников, Спустя много времени я таки смог изменить скрипт в рабочую сторону. Это было трудно.
Похожие вопросы