Dalam Lava Berbahaya, Anda belajar cara mengaktifkan kode berdasarkan perilaku pengguna. Tutorial ini menunjukkan cara membuat platform yang memudar saat pengguna menginjaknya.
Mengatur
Jika Anda mengikuti Deadly Lava, Anda dapat menempatkan platform Anda yang memudar di atas lantai lava yang tidak dapat dilewati pengguna.
Sisipkan bagian dan letakkan di tempatnya di dunia Anda. Beri nama FadingPlatform .
Ubah ukurannya agar seorang pengguna dapat melompat di atasnya.
Pastikan itu Tertancam .
Sisipkan Skrip ke bagian, ganti nama itu menjadi FadeOnTouch , dan hapus kode default.
Buat variabel untuk platform dan fungsi kosong yang terhubung ke acara Touched platform.
local platform = script.Parentlocal function fade()endplatform.Touched:Connect(fade)
Menghilangkan Platform
Memiliki platform menghilang dalam sekejap pun tidak akan menyenangkan sama sekali karena pengguna akan menemukan sulit untuk melewati celah. Sebaliknya, platform harus memudar sebelum pengguna jatuh melalui untuk memberi mereka kesempatan untuk melompat mati.
Anda dapat mengubah Transparency property dan menunggu waktu yang sangat pendek di atas dan di bawah untuk mendapatkan efek ini, tetapi pudar perlahan akan mengharuskan setidaknya 10 perubahan antara 0 dan 1. Itu adalah 20 baris kode yang sangat berulang.
Ini dapat dicapai lebih efektif menggunakan untuk siklus yang mengulangi kode beberapa kali. Setiap siklus dari kode dikenal sebagai iterasi . A for loop didefinisikan dengan tiga hal, dipisahkan oleh koma:
- Variabel kontrol - Variabel dibuat dan digunakan untuk menghitung loop. Dalam contoh ini, itu count dan nilai awal adalah 1.
- Nilai akhir -Nilai yang harus diperoleh untuk berhenti. Dalam contoh ini, itu 10.
- Tahap peningkatan (opsional) - Menentukan apa yang harus ditambahkan ke variabel kontrol setiap putaran. Jika ditinggalkan, itu default menjadi 1, jadi dalam contoh ini tidak perlu.
Dalam FadeOnTouch :
Dalam fungsi, buat for loop dimulai dari 1 yang mengulangi 10 kali.
Di dalam for loop, tetapkan propinsi Transparency ke variabel kontrol dibagi oleh 10.
Panggil fungsi task.wait() dengan waktu 0.1 .
local platform = script.Parentlocal function fade()for count = 1, 10 doplatform.Transparency = count / 10task.wait(0.1)endendplatform.Touched:Connect(fade)
Ketika loop berjalan, count meningkat 1 dengan setiap iteration. Ini berarti bahwa Transparency platform akan meningkat 0,1 setiap 0,1 detik, mencapai transparansi penuh setelah 1 detik.
Muncul kembali
Setelah platform menghilang, pengguna harus jatuh melalui itu. Platform juga harus kembali beberapa detik setelah menghilang - jika tidak, pengguna tidak akan pernah mencoba lompat lagi jika mereka gagal. Propiedad CanCollide mengontrol apakah pengguna dapat jatuh melalui bagian.
Tetapkan propinsi CanCollide dari platform ke false setelah for loop.
Tunggu beberapa detik menggunakan fungsi task.wait() ini.
Tetapkan propinsi CanCollide kembali ke true .
Tetapkan Transparency property kembali ke 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)
Debounce Variabel
Dalam Lava Berbahaya, Anda belajar bahwa acara Touched menjalankan setiap kali bagian tubuh pengguna berada dalam kontak dengan bagian. Perilaku ini menyebabkan masalah ketika pengguna berlari melintasi platform yang memudar: fungsi akan dijalankan beberapa kali, mengatur ulang siklus setiap kali.
Untuk memastikan bahwa kode berfungsi dengan benar, fungsi hanya harus dijalankan sekali saat pengguna menyentuh platform untuk pertama kalinya. Menjamin bahwa tindakan hanya akan diaktifkan sekali saat itu akan sebaliknya diaktifkan beberapa kali dikenal sebagai debouncing .
Untuk mengurangi fungsi, variabel Boolean dapat digunakan untuk melacak kapan platform telah disentuh. Booleans hanya dapat mengandung benar dan salah nilai. Buat variabel bernama 1> isTouched1> dan tetap ke 4> false4> .
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)
Memeriksa Variabel
Sebuah if statement dapat digunakan untuk hanya mengeksekusi kode dalam fungsi fade jika variabel debouncing isTouched adalah benar. Wrap body fungsi fade dalam sebuah if if statement dengan kondisi not isTouched .
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)
Operator Lua not mengubah nilai apa pun yang mengikutinya. Secara ketentuan, ini berarti bahwa pernyataan pertama jika bersikap sama seperti pernyataan yang mengikuti.
if not isTouched thenendif isTouched == false thenendif isTouched == nil thenend
Mengubah Debounce
Saat ini, kode dalam fungsi fade akan selalu berjalan karena isTouched salah dan not isTouched mengevaluasi ke benar. Untuk menyelesaikan rutinitas debounce, Anda harus mengubah nilai variabel dalam dua tempat.
- Tetapkan isTouched ke true di dalam pernyataan if, sebelum platform mulai menyudar.
- Setel kembali ke false setelah platform muncul kembali.
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)
Dan itu dia! Uji kode Anda sekarang, dan Anda harus menemukan bahwa platform menghilang saat pengguna melompat ke atasnya dan kemudian kembali beberapa detik kemudian.
Anda dapat menggandakan platform ini melalui celah yang lebih besar untuk menciptakan tantangan yang menantang dan mengubah kecepatan saat mereka memudar untuk menyeimbangkan kesulitan.
Kode Terakhir
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)