In Deadly Lava hast du gelernt, wie du Code basierend auf Benutzerverhalten auslösen kannst. Dieses Tutorial zeigt dir, wie du eine Plattform erstellen kannst, die wegfällt, wenn ein Benutzer darauf tritt.
Einstellungen
Wenn Sie tödliche Lava gefolgt sind, können Sie Ihre schwebende Plattform über dem Lavaboden platzieren, den Benutzer nicht überqueren können.
Fügen Sie ein Teil ein und bewegen Sie es in Ihre Welt. Benennen Sie es FadingPlatform .
Skaliere es, damit ein Benutzer darauf springen kann.
Stellen Sie sicher, dass es verankert ist.
Fügen Sie ein Skript in das Teil ein, benennen Sie es in FadeOnTouch um und entfernen Sie den Codes.
Erstellen Sie eine Variable für die Plattform und eine leere Funktion, die mit dem Ereignis Touched der Plattform verbunden ist.
local platform = script.Parentlocal function fade()endplatform.Touched:Connect(fade)
Die Plattform verlassen
Hätte die Plattform in einem Augenblick verschwunden, wäre es kein Spaß, da Benutzer finden würden, dass es unmöglich ist, über die Lücke zu gelangen. Stattdessen sollte die Plattform verschwinden , bevor Benutzer durch sie springen, um ihnen die Chance zu geben, aus.
Du könntest die Transparency Eigenschaft ändern und sehr kurze Zeit wiederholt ändern, um diesen Effekt zu erhalten, aber ein schneller Verblasstyp würde mindestens 10 Änderungen zwischen 0 und 1 erfordern. Das sind 20 Zeilen sehr wiederholten Codes.
Dies kann mit einem for -Loop, der Code um eine bestimmte Anzahl von Zeiten wiederholt, erzielt werden. Jeder Loop des Codes wird als ein Iter bekannt. Ein for Loop wird mit drei Dingen definiert, die durch Kommas getrennt sind:
- Kontrolliere die Variable - Die Variable, die erstellt und verwendet wird, um die Loop-Counts zu zählen. In diesem Beispiel ist es count und der Startwert ist 1.
- Endwert - Der Wert, den es für die Loop-Stoppung benötigt. In diesem Beispiel beträgt er 10.
- Schritt-Inkrement (optional) - Bestimmt, was zur Steuervariable jedes Loop hinzugefügt werden soll. Wenn ausgelassen, wird standardmäßig auf 1 gesetzt, so dass in diesem Beispiel nicht notwendig.
In FadeOnTouch :
In der Funktion erstellen Sie einen for Loop, der ab 1 beginnt, der 10 1>Zeiten1> wiederholt.
In der for-Schleife setzen Sie die Eigenschaft Transparency auf die Kontroll variabel geteilt durch 10.
Rufen Sie die Funktion task.wait() mit einer Zeit von 0.1 auf.
local platform = script.Parentlocal function fade()for count = 1, 10 doplatform.Transparency = count / 10task.wait(0.1)endendplatform.Touched:Connect(fade)
Wenn die Schleife läuft, erhöht sich die Count mit jedem Durchgang um 1. Dies bedeutet, dass die Plattform's Transparency nach 1 Sekunde vollständige Transparenz erreicht.
Erneut auftauchen
Nachdem die Plattform verschwunden ist, sollten Benutzer durch sie fallen. Die Plattform sollte auch innerhalb weniger Sekunden nach dem Verblasen zurückkommen - sonst würden Benutzer niemals wieder versuchen, den Sprung erneut zu versuchen, wenn sie fehlgeschlagen sind. Die Eigenschaft CanCollide steuert, ob Benutzer durch ein Teil fallen können.
Setzen Sie die CanCollide Eigenschaft der Plattform auf false nach dem For-Loop.
Warte mit der Funktion task.wait() einige Sekunden.
Setzen Sie die CanCollide Eigenschaft auf true zurück.
Set the Transparency property back to 0 .
local platform = script.Parentlocal function fade()for count = 1, 10 doplatform.Transparency = count / 10task.wait(0.1)endplatform.CanCollide = falsetask.wait(3)platform.CanCollide = trueplatform.Transparency = 0endplatform.Touched:Connect(fade)
Variable Debounce
In Tödliche Lava hast du gelernt, dass das Ereignis Touched jedes Mal ausgeführt wird, wenn ein Benutzerkörper-Teil mit dem Teil in Kontakt kommt. Dieses Verhalten verursacht Probleme, wenn ein Benutzer über die verblassende Plattform läuft: Die Funktion wird mehrmals ausgeführt, wodurch der Loop jedes Mal zurückgesetzt wird.
Damit der Code richtig funktioniert, sollte die Funktion nur einmal ausgeführt werden, wenn der Benutzer die Plattform zum ersten Mal berührt. Es ist bekannt als Debounce , wenn eine Aktion nur einmal ausgelöst wird, wenn sie sonst mehrmals ausgelöst wird.
Um eine Funktion zu debounce, kann eine Boolean- Variable verwendet werden, um die zu verfolgen, wann die Plattform bereits berührt wurde. Booleans können nur eine und eine Werte enthalten. Erstellen Sie eine Variable namens 2> isTouched2> und setzen Sie sie auf 5> false5> .
local platform = script.Parent
local isTouched = false
local function fade()
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
end
platform.Touched:Connect(fade)
Variable wird überprüft
Ein if-Ausruf kann verwendet werden, um nur den Code in der Fade-Funktion auszuführen, wenn die isTouched- Variable auf der Rückprall-변수 falsch ist. Wrap den Körper der Fade-Funktion in eine if -Anweisung mit der Bedingung not isTouched, um den Code zu 2>5>ein5>-Fache2> zu reduzieren.
local platform = script.Parent
local isTouched = false
local function fade()
if not isTouched then
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
end
end
platform.Touched:Connect(fade)
Der Lua not Operator umkehrt den Wert, was auch immer ihn folgt. In Bedingungen bedeutet dies, dass die erste If-Anweisung so funktioniert, wie die Anweisungen, die folgen.
if not isTouched thenendif isTouched == false thenendif isTouched == nil thenend
Debounce umschalten
Der Code in der fade-Funktion wird immer ausgeführt, da isTouched falsch ist und not isTouched auf wahr evaluiert wird. Um die Debounce-Routine abzuschließen, musst du den Wert der Variable in zwei Orten umstellen.
- Set isTouched to true innerhalb der if-Anweisung, bevor die Plattform beginnt zu verschwinden.
- Setzen Sie es zurück auf false, sobald die Plattform wieder erschienen ist.
local function fade()
if not isTouched then
isTouched = true
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
isTouched = false
end
end
platform.Touched:Connect(fade)
Und das ist es! Testen Sie Ihren Code jetzt, und Sie sollten finden, dass die Plattform wegfällt, wenn der Benutzer darauf springt und ein paar Sekunden später zurückkommt.
Du kannst diese Plattform über eine größere Lücke duplizieren, um ein herausforderndes Hindernis zu erstellen und die Geschwindigkeit zu ändern, mit der sie abgewogen werden, um die Schwierigkeit auszubalancieren.
End-Code
local platform = script.Parent
local isTouched = false
local function fade()
if not isTouched then
isTouched = true
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
isTouched = false
end
end
platform.Touched:Connect(fade)