Bẫy Mờ Dần

*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 Deadly Lava, bạn đã học cách tạo ra mã dựa trên hành vi người dùng. Hướng dẫn này cho bạn thấy cách làm cho một nền tảng mà biến mất khi một người bước vào nó.

Cài đặt

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

  1. Lấy một phần và di chuyển nó vào chỗ trong thế giới của bạn. Đặt tên nó là FadingPlatform .

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

  3. Hãy đảm bảo nó Có kết dính .

  4. Lập một Script vào bộ phận, đổi tên 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 trố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)

Đang dần mời đi

Việc có một chiếc máy chủ biến mất trong một nháy mắt sẽ không hề vui vẻ gì cả, vì người dùng sẽ tìm thấy nó không thể nhìn thấu. Thay vào đó, nền tảng nên mờ dần trước khi người dùng thấp hơn nó để cho họ có cơ hội nhảy tắt.

Bạn có thể thay đổi thuộc tính Transparency và chờ đợi một thời gian rất ngắn một lần nữa để nhận hiệu ứng này, nhưng một mời 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ả nhiều hơn bằng cách sử dụng một vòng lặp for lặp lại mã một lượt nhất định. Mỗi vòng lặp của mã được gọi là một iteration . A for lặp được định nghĩa bằng ba thứ, được phân cách bởi các dấu chấm câu:

  • Điều khiển biến - Biến được tạo và sử dụng để đếm các lần lặp. Trong ví dụ này, nó là count và giá trị khởi đầu là 1.
  • Giá trị cuối cùng - Giá trị nó phải nhận để cho vòng lặp dừng lại. Trong ví dụ này, nó là 10.
  • Bước tăng dần (tùy chọn) - Xác định những gì để thêm vào biến điều khiển mỗi lần lặp. Nếu bỏ rơi, 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 for lượt lặp bắt đầu từ 1 which iterates 10 times.

  2. Trong for loop, set the Transparency property to the control variable divided by 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 lượt lặp được thực hiện, số lần đếm tăng lên 1 với mỗi lần lượt. Đ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 đến sự trong suốt hoàn toàn sau 1 giây.

Hồi sinh

Sau khi nền tảng biến mất, người dùng nên rơi xuống nó. Nền tảng nên cũng sẽ quay lại một 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ó thể thử lại nhảy nếu họ bị thất bại. Thuộc tính CanCollide kiểm tra xem người dùng có thể rơi qua một phần không.

  1. Đặt tính CanCollide của nền tảng lên false sau khi for lặp.

  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 độ trong suốt của Transparency lại về 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 thể Debounce

Trong Deadly Lava, bạn đã học được rằng sự kiện Touched được thực hiện mỗi khi một phần cơ thể của người dùng tiếp xúc với phần. Điều này gây ra các vấn đề khi người dùng chạy qua nền tảng mờ dần: chức năng sẽ thực hiệ

Để 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ẽ kích hoạt nhiều lần nếu nó không được kích hoạt nhiều lần. Được gọi là debouncing Để bật lên một 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. Booleans chỉ có thể chứa các giá trị đúnggiả . Tạo một biến tên là 1> isTou


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 if statement có thể được sử dụng để chỉ thi hành mã trong chức năng fade nếu isTouched đổi biến debouncing là false. Wrap body of the fade function in an if statement with the condition 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)

The Lua not operator reverses the value of whatever follows it. Ở điều điều khoản, điều này có nghĩa là tuyên bố đầu tiên if được hành động giống như các tuyên bố theo theo dõi.


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

Bật/Tắt Debounce

Hiện tại, mã trong fade hàm luôn luôn được thi hành vì isTouched là sai và not isTouched đánh giá đến true. Để hoàn thành debounce routine, bạn sẽ cần phải đổi giá biến trong hai nơi.

  1. Đặt isTouched vào true trong câu if trước khi nền tảng bắt đầu mờ dần.
  2. Đặt nó lại thành false sau 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à thôi! Thử nghiệm mã của bạn ngay bây giờ, và bạn nên thấy rằng nền tảng này 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 qua một khe rộng hơn để tạo ra một vật cản thử thách và thay đổi tốc độ mà chúng mờ dần để bù đổi sự 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)