Trong Cạn Nước Chết, bạn đã học cách kích hoạt mã dựa trên hành vi của người dùng. Hướng dẫn này sẽ chỉ cho bạn cách tạo ra một nền tảng mà mờ dần khi người dùng chạy lên nó.
Thiết lập
Nếu bạn đã theo dõi Cạn Nước Chết, bạn có thể đặt nền tảng mờ dần của mình trên sàn lava mà người dùng không thể nhảy qua.
Chèn một phần và di chuyển nó vào vị trí trong thế giới của bạn. Đặt tên cho nó là FadingPlatform.
Thay đổi kích thước nó để người dùng có thể nhảy lên.
Đảm bảo rằng nó được Ghim.

Chèn một Script vào phần này, đổi tên thành FadeOnTouch, và xóa mã mặc định.

Tạo một biến cho nền tảng và một hàm trống được kết nối với sự kiện Touched của nền tảng.
local platform = script.Parentlocal function fade()endplatform.Touched:Connect(fade)
Mờ dần nền tảng
Việc nền tảng biến mất ngay lập tức sẽ không thú vị chút nào vì người dùng sẽ thấy điều đó không thể vượt qua khoảng trống. Thay vào đó, nền tảng nên mờ dần trước khi người dùng rơi qua nó để cho họ có cơ hội nhảy ra.
Bạn có thể thay đổi thuộc tính Transparency và chờ một khoảng thời gian rất ngắn lặp đi lặp lại để có được hiệu ứng này, nhưng một sự mờ dần dần sẽ yêu cầu ít nhất 10 thay đổi giữa 0 và 1. Đó là 20 dòng mã lặp đi lặp lại rất nhiều.
Điều này có thể đạt được hiệu quả hơn bằng cách sử dụng một vòng lặp for lặp lại mã một số lần xác định. Mỗi lần lặp mã được gọi là một lần lặp. Một vòng lặp for được xác định với ba điều, phân cách bởi dấu phẩy:

- Biến điều khiển - Biến được tạo và sử dụng để đếm các vòng lặp. Trong ví dụ này, nó là count và giá trị bắt đầu là 1.
- Giá trị kết thúc - Giá trị mà nó phải đạt để vòng lặp dừng lại. Trong ví dụ này, nó là 10.
- Bước gia tăng (tuỳ chọn) - Xác định điều gì sẽ được thêm vào biến điều khiển mỗi vòng lặp. Nếu không chỉ định, mặc định là 1, vì vậy trong ví dụ này là không cần thiết.
Trong FadeOnTouch:
Trong hàm, tạo một vòng lặp for bắt đầu từ 1 và lặp 10 lần.
Bên trong vòng lặp for, đặt thuộc tính Transparency thành biến điều khiển chia cho 10.
Gọi hàm task.wait() với thời gian là 0.1.
local platform = script.Parentlocal function fade()for count = 1, 10 doplatform.Transparency = count / 10task.wait(0.1)endendplatform.Touched:Connect(fade)
Khi vòng lặp chạy, count tăng thêm 1 với mỗi lần lặp. Điều này có nghĩa là Transparency của nền tảng sẽ tăng thêm 0.1 mỗi 0.1 giây, đạt được độ trong suốt hoàn toàn sau 1 giây.
Xuất hiện lại
Sau khi nền tảng đã biến mất, người dùng sẽ rơi qua nó. Nền tảng cũng nên xuất hiện lại vài giây sau khi nó mờ - nếu không, người dùng sẽ không bao giờ có cơ hội thử nhảy lại nếu họ thất bại. thuộc tính CanCollide kiểm soát xem người dùng có thể rơi qua một phần hay không.
Đặt thuộc tính CanCollide của nền tảng thành false sau vòng lặp for.
Chờ vài giây sử dụng hàm task.wait().
Đặt thuộc tính CanCollide trở lại thành true.
Đặt lại thuộc tính Transparency thành 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)
Biến Debounce
Trong Cạn Nước Chết, bạn đã học rằng sự kiện Touched chạy mỗi lần một phần cơ thể của người dùng tiếp xúc với phần. Hành vi này gây ra vấn đề khi người dùng chạy trên nền tảng mờ dần: hàm sẽ chạy nhiều lần, thiết lập lại vòng lặp mỗi lần.
Để mã hoạt động đúng cách, hàm chỉ nên được chạy một lần khi người dùng chạm vào nền tảng lần đầu tiên. Đảm bảo rằng một hành động chỉ được kích hoạt một lần khi nó sẽ được kích hoạt nhiều lần được gọi là debouncing.
Để debounce một hàm, một biến boolean có thể được sử dụng để theo dõi khi nền tảng đã được chạm vào. Các giá trị boolean chỉ có thể chứa true và false. Tạo một biến gọi là isTouched và đặt nó thành false.
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)
Kiểm tra biến
Một câu lệnh if có thể được sử dụng để chỉ chạy mã trong hàm fade nếu biến debounce isTouched là false. Bọc phần thân của hàm fade trong một câu lệnh if với điều kiện 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)
Toán tử not của Luau đảo ngược giá trị của bất cứ điều gì theo sau nó. Về khía cạnh điều kiện, điều này có nghĩa là câu lệnh if đầu tiên hành xử giống với các câu lệnh theo sau.
if not isTouched thenendif isTouched == false thenendif isTouched == nil thenend
Đổi trạng thái debounce
Hiện tại, mã trong hàm fade sẽ luôn chạy vì isTouched là false và not isTouched đánh giá thành true. Để hoàn thành quy trình debounce, bạn sẽ cần đảo ngược giá trị của biến ở hai vị trí.
- Đặt isTouched thành true bên trong câu lệnh if, trước khi nền tảng bắt đầu mờ.
- Đặt lại thành false khi nền tảng đã xuất hiện lại.
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)
Và đó là tất cả! Hãy kiểm tra mã của bạn bây giờ, và bạn nên thấy rằng nền tảng mờ dần khi người dùng nhảy lên nó và quay lại sau vài giây.
Bạn có thể sao chép nền tảng này qua một khoảng trống rộng hơn để tạo ra một trở ngại khó khăn hơn và thay đổi tốc độ mà chúng mờ dần để cân bằng mức độ khó khăn.
Mã cuối cùng
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)