2015-12-25 3 views
0

так я этот кодRoblox Lua скрипт не активируя

local player = game.Players.LocalPlayer 
local unitFrame = script.Parent 
local buttona = unitFrame.buttonA 
local sprinting = true 

unitFrame.Title.Text = "Perks" 
local function onButtonAClick() 
    unitFrame.Title.Text = "perks" 
end 

local function sprintButton() 
    if sprinting == false then 
     sprinting = true 
     player.Character.Humanoid.WalkSpeed = 20 
     unitFrame.buttonA.Text = "strinting" 
    end 
    if sprinting == true then 
     sprinting = false 
     player.Character.Humanoid.WalkSpeed = 16 
     unitFrame.buttonA.Text = "walking" 
    end 
end 

buttona.MouseButton1Click:connect(sprintButton) 

, что я пытаюсь сделать, это сделать программу спринта тумблера. Единственная проблема заключается в том, что он будет работать, а затем не будет работать вообще. я могу щелкнуть по нему, и он меняет текст, а затем, когда я нажимаю его снова, он ничего не делает. Я хочу, чтобы он мог работать каждый раз, когда вы его нажимаете.

+0

Связаны ли подключенные обработчики один раз, а затем необходимо снова подключиться? Нужно ли им возвращать 'true' или' false' или что-то оставаться на связи? Изменяет ли текст кнопки отключение обработчиков? –

+0

ummmm я так не думаю. – master

+0

основываясь на этом коде на вики roblox, вы можете переключить его, чтобы я не знал, что происходит. Local local = скрипт. Параметр local sound = button: WaitForChild ('Sound') sound: Play() локальная функция onButtonClick() \t если sound.IsPlaying затем \t \t button.Image = 'rbxgameasset: // Images/MusicOff' \t \t звук: Stop() \t еще \t \t button.Image = «rbxgameasset: // Images/MusicOn ' \t \t звук: Play() \t конец конец button.MouseButton1Click: подключение (onButtonClick) ' – master

ответ

1

В функции вы проверяете утверждения 2 if. Если спринт является ложным, и если это так.

Ключом к пониманию вашей проблемы является то, что ваши заявления if противодействуют друг другу.

Давайте рассмотрим это, сначала оно обнаружит, является ли оно ложным. Нет, спринт не является ложным. Тогда, если проверка, если это правда. Это! Поэтому он устанавливает значение false.

Отлично, правда? Хорошо, вот твоя проблема. Когда вы повторите попытку, спринт будет ложным. Итак, выполняется первая инструкция if, и она устанавливает значение true. Но тогда оператор ANOTHER if выполняется сразу после. Поскольку это правда, это выполняется, устанавливая значение false. Кажется, ничего не случилось.

Ваше решение? Выньте конец в первый оператор if и замените второй, если на elseif. Таким образом, когда один оператор оценивается как true, он не будет оценивать следующий.

1

Неправильная логика. Как сказал warspking, у вас есть проблема с вашими условностями. Исправьте это, добавив вместо этого инструкцию elseif.

local function sprintButton() 
    if not sprinting then 
     sprinting = true 
     player.Character.Humanoid.WalkSpeed = 20 
     unitFrame.buttonA.Text = "sprinting" 
    elseif sprinting then 
     sprinting = false 
     player.Character.Humanoid.WalkSpeed = 16 
     unitFrame.buttonA.Text = "walking" 
    end 
end 
+0

Не оскорбительно, но в чем смысл этого ответа? Вы точно уточнили, что я сказал, с небольшим объяснением, почему это так. – warspyking

+0

@warspyking не выходить как очевидный, но OP, возможно, понравился бы пример VISUAL. Это StackOverflow, где каждый вносит свой вклад, когда чувствует, что другим не хватает. –

+0

Точка взята, но теперь у него есть 2 примера с объяснением и пример. Что он должен принять? – warspyking