Bẫy mờ

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Trong Lava Chết Người, 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ờ đi khi người dùng bước lên nó.

Thiết lập

Nếu bạn đã theo dõi Lava Chết Người, bạn có thể đặt nền tảng mờ của mình trên mặt đất lava mà người dùng không thể nhảy qua.

  1. 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 là FadingPlatform.

  2. Thay đổi kích thước để người dùng có thể nhảy lên nó.

  3. Đảm bảo nó được Ghim lại.

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

  5. Tạo một biến cho nền tảng và một hàm rỗng kết nối với sự kiện Touched của nền tảng.

    local platform = script.Parent
    local function fade()
    end
    platform.Touched:Connect(fade)

Mờ 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 khó khăn để vượt qua khoảng trống. Thay vào đó, nền tảng nên mờ đi 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 sẽ yêu cầu ít nhất 10 thay đổi giữa 0 và 1. Đó là 20 dòng mã rất lặp đi lặp lại.

Điều này có thể đạt được hiệu quả hơn nhiều bằng cách sử dụng một vòng lặp for lặp lại mã một số lần cụ thể. Mỗi lần lặp của mã được gọi là một lần lặp. Một vòng lặp for được định nghĩa với ba thứ, được phân tách bằng dấu phẩy:

  • Biến điều khiển - Biến được tạo ra 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 được để vòng lặp dừng lại. Trong ví dụ này, nó là 10.
  • Bước tăng
    TÙY CHỌN
    - Xác định những gì sẽ được thêm vào biến điều khiển mỗi vòng lặp. Nếu không có, nó mặc định là 1, vì vậy trong ví dụ này là không cần thiết.

Trong FadeOnTouch:

  1. Trong hàm, tạo một vòng lặp for bắt đầu từ 1 lặp lại 10 lần.

  2. Bên trong vòng lặp for, đặt thuộc tính Transparency bằng biến điều khiển chia cho 10.

  3. Gọi hàm task.wait() với thời gian là 0.1.

    local platform = script.Parent
    local function fade()
    for count = 1, 10 do
    platform.Transparency = count / 10
    task.wait(0.1)
    end
    end
    platform.Touched:Connect(fade)

Khi vòng lặp chạy, count tăng lên 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 lên 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ờ đi - 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 điều khiển việc người dùng có thể rơi qua một phần hay không.

  1. Đặt thuộc tính CanCollide của nền tảng thành false sau vòng lặp for.

  2. Chờ vài giây bằng cách sử dụng hàm task.wait().

  3. Đặt thuộc tính CanCollide trở lại true.

  4. Đặt thuộc tính Transparency trở lại 0.

    local platform = script.Parent
    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)

Biến Debounce

Trong Lava Chết Người, bạn đã học rằng sự kiện Touched chạy mỗi khi một bộ 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 một người dùng chạy qua nền tảng mờ: hàm sẽ chạy nhiều lần, đặt lại vòng lặp mỗi lần.

Để mã hoạt động đúng, hàm chỉ nên 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. Booleans chỉ có thể chứa các giá trị truefalse. 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 trong Luau đảo ngược giá trị của bất cứ điều gì theo sau nó. Về mặt điều kiện, điều này có nghĩa là câu lệnh if đầu tiên hoạt động giống như các câu lệnh theo sau.

if not isTouched then
end
if isTouched == false then
end
if isTouched == nil then
end

Chuyển đổ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á là true. Để hoàn thành quy trình debounce, bạn sẽ cần chuyển đổi giá trị của biến ở hai nơi.

  1. Đặt isTouched thành true bên trong câu lệnh if, trước khi nền tảng bắt đầu mờ đi.
  2. Đặ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 sẽ thấy rằng nền tảng mờ đi khi người dùng nhảy lên nó và xuất hiện lại vài giây sau.

Bạn có thể nhân bản nền tảng này qua một khoảng cách rộng hơn để tạo ra một chướng ngại vật thách thức và thay đổi tốc độ mà chúng mờ đi để cân bằng độ khó.

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)
©2026 Roblox Corporation. Roblox, logo Roblox và Powering Imagination là các nhãn hiệu đã đăng ký và chưa đăng ký của chúng tôi tại Hoa Kỳ và các quốc gia khác.