Bẫy biến mất

*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 Dung nham chết chóc, 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 cho bạn biết cách tạo một nền tảng mờ dần khi người dùng bước vào nó.

Thiết lập

Nếu bạn tuân theo Dung nham chết chóc, bạn có thể đặt nền tảng mờ dần của mình trên tầng 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 chỗ trong thế giới của bạn. Đặt tên nó FadingPlatform .

  2. Thay đổi kích cỡ để người dùng có thể nhảy vào nó.

  3. Hãy chắc chắn rằng nó là Cố định .

  4. Thêm Tập lệnh 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 chức năng trống được kết nối với sự kiện Touched.


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

Làm mờ nền tảng

Việc nền tảng biến mất trong một lúc sẽ không vui chút nào vì người dùng sẽ thấy nó không thể vượt qua khoảng cách.Thay vào đó, nền tảng nên biến mất trước khi người dùng rơi qua nó để cho họ cơ hội nhảy tắt.

Bạn có thể thay đổi thuộc tính Transparency và chờ một thời gian rất ngắn lần này qua lần khác để có được hiệu ứng này, nhưng sự biến mất từ từ 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 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 cho lặp lại mã một số lần cụ thể.Mỗi vòng lặp của mã được biết đến như một lần lặp lại .Vòng lặp A được định nghĩa với ba thứ, được tá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ị khởi động là 1.
  • Giá trị cuối cùng - Giá trị mà nó phải có để chu kỳ dừng lại. Trong ví dụ này, nó là 10.
  • Tăng bước (tùy chọn) - Xác định những gì cần thêm vào biến điều khiển mỗi lần lặp.Nếu bị bỏ ra, nó sẽ mặc định là 1, vì vậy trong ví dụ này nó không cần thiết.

Trong FadeOnTouch :

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

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

  3. Gọi chức năng task.wait() với thời gian 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, số lượng tăng lên 1 với mỗi lần lặp lại.Điều này có nghĩa là nền tảng của Transparency sẽ tăng 0,1 mỗi 0,1 giây, đạt đến sự minh bạch 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 nên rơi qua nó.Nền tảng cũng nên quay trở lại vài giây sau khi nó biến mất - 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.

  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 chức năng 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 giảm tốc độ Debounce

Trong Nham thạch chết chóc, bạn đã học được rằng sự kiện Touched chạy mỗi khi 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 qua nền tảng biến mất: chức năng 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, chức năng 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ẽ bị kích hoạt nhiều lần khác là được gọi là giảm bớt .

Để giảm tốc chức năng, một biến boolean có thể được sử dụng để theo dõi khi nào nền tảng đã được chạm vào.Booleans chỉ có thể chứa đúnggiả giá trị.Tạo một biến có tên 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 tuyên bố if có thể được sử dụng để chỉ thực thi mã trong chức năng fade nếu biến giảm thời gian chậm isTouched là sai.Bọc cơ thể của chức năng fade trong một tuyên bố 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)

Nhà vận hành Luau not đảo ngược giá trị của bất kỳ thứ gì theo sau nó.Theo điều điều khoản, điều này có nghĩa là tuyên bố if đầu tiên hành xử giống như các tuyên bố tiếp theo dõi.


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

Bật/tắt giảm thời gian trễ

Hiện tại, mã trong chức năng fade sẽ luôn chạy vì isTouched là sai và not isTouched đánh giá là đúng.Để hoàn thành chu trình giảm thời gian chờ, bạn sẽ cần phải chuyển đổi giá trị của biến ở hai nơi.

  1. Đặt isTouched vào true bên trong tuyên bố if, trước khi nền tảng bắt đầu biến mất.
  2. Đặt nó trở lại false một khi nền tảng xuất hiện trở 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à nó! Kiểm tra mã của bạn ngay bây giờ, và bạn nên tìm thấy rằng nền tảng biến mất khi người dùng nhảy vào nó và quay lại một vài giây sau đó.

Bạn có thể sao chép nền tảng này sang 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 biến mất để cân bằng độ khó.

Mã cuối mã


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)