Tập luyện vòng lặp - tạo một cầu có thời gian

*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.

Dự án này là một ví dụ khác về việc sử dụng vòng lặp theo cách thực tế.Với cây cầu này, người chơi sẽ chạm vào một nút để làm cho cây cầu có thể đi bộ trong một thời gian giới hạn trước khi nó biến mất.Để tạo một bộ đếm thời gian và hiển thị thời gian còn lại cho một người chơi, bạn sẽ sử dụng vòng lặp.

Thiết lập dự án

Cây cầu này có thể được bao gồm trong bất kỳ dự án trò chơi nào có các thử thách dựa trên chuyển động, giống như một obby.

Tạo các bộ phận

  1. Tìm một nơi để xây dựng một cây cầu, như một con sông hoặc một khoảng trống lớn trong một obby. Tạo ba phần được neo như dưới đây.

    • Hiển thị thời gian
    • Cầu
    • Cầu Nút
  2. Khi không hoạt động, cầu sẽ trở nên mờ nhạt. Để làm điều đó, hãy chọn Cầu và thay đổi các thuộc tính của nó.

    • Minh bạch = 0.8
    • Có thể va chạm = False

Tạo màn hiển thị bộ đếm thời gian

Khi vượt cầu, người chơi sẽ cần phải xem bao nhiêu giây còn lại trước khi cây cầu biến mất.Một cách để hiển thị hình ảnh hoặc văn bản là bằng cách thêm một đối tượng được gọi là Surface GUI vào một phần. Giao diện người dùng bề mặt cũng có thể được sử dụng để tạo các dấu hiệu trong trò chơi, thanh sức khỏe tùy chỉnh và hệ thống kho chứa.Hướng dẫn này sẽ đi qua nhanh chóng, nhưng thêm thông tin có thể được tìm thấy trong phần Hướng dẫn.

  1. Chọn TimerDisplay và thêm một SurfaceGui . Sau đó, cha cho Surface Gui, thêm một TextLabel .

  2. Chọn Surface GUI. Trong Thuộc tính, thực hiện các thay đổi sau:

    • Thay đổi Mặt để bạn có thể xem nhãn văn bản trên mặt trước của bộ đếm thời gian nơi người chơi đang nhìn.
  3. Chọn Thẻ Văn Bản. Trong Tính Năng, thực hiện các thay đổi sau:

    • Đặt Kích thước đến {1, 0},{1, 0}.
    • Đặt TextScaled thành true.
    • Set Văn bản để trống. Văn bản sẽ được cập nhật bằng cách sử dụng kịch bản.

Thiết lập kịch bản

Bây giờ khi đồng hồ báo thời gian đã được địa điểm, tạo một kịch bản để kiểm soát cầu và hiển thị số ngày đếm ngược cho người chơi.

  1. Trong phần Cầu, thêm một kịch bản mới có tên TimedBridge. Trong kịch bản đó, tạo các biến sau.


    local bridge = script.Parent
    local button = workspace.ButtonBridge
    local timerText = workspace.TimerDisplay.SurfaceGui.TextLabel
    -- Bao lâu cây cầu sẽ vẫn còn vững chắc
    local timerDuration = 5

Mã hóa tương tác chạm

Để sử dụng cầu, bạn sẽ cần tạo hai chức năng.Một chức năng sẽ làm cho cầu có thể đi bộ và hiển thị bộ đếm thời gian.Chức năng còn lại sẽ lắng nghe nếu một người chơi chạm vào nút kích hoạt cầu.

  1. Tạo một chức năng mới có tên là startTimer() với một tuyên bố in bên trong. Bạn sẽ sử dụng tuyên bố in để kiểm tra mã của bạn.


    local timerDuration = 5
    local function startTimer()
    print("Countdown started")
    end
  2. Mã hóa một chức năng có tên buttonPressed() để kiểm tra xem một hình người có chạm vào nút hay không.Chức năng nên chấp nhận một tham số của partTouched , và sau đó có một câu lệnh trống nếu một humanoid được phát hiện trong phần đó.


    local function startTimer()
    print("Countdown started")
    end
    local function buttonPressed(partTouched)
    local character = partTouched.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    end
    end
  3. Để khởi động bộ đếm thời gian, trong tuyên bố if, gọi chức năng startTimer().


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
  4. Dưới cuối của buttonPressed(), kết nối chức năng buttonPressed() với sự kiện Touched của nút.


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
    button.Touched:Connect(buttonPressed)
  5. Chạy dự án. Chạm vào phần và kiểm tra cửa sổ Thành phẩm để xem tuyên bố in.

Mẹo khắc phục sự cố

Tại thời điểm này, nếu cầu không hoạt động như dự định, hãy thử một trong những điều sau. Vấn đề : Tin nhắn lỗi nói: "... is not a valid member of workspace" .

  • Trong kịch bản TimedBridge, kiểm tra xem tất cả các bộ phận được viết chính xác như chúng được xem trong Explorer. Vấn đề: Không thể nhìn thấy các bộ phận.

  • Hãy chắc chắn tất cả ba phần được neo.

  • Kiểm tra thuộc tính minh bạch cho cầu.

Tạo bộ đếm thời gian

Mỗi khi người chơi bước vào cầu, startTimer() sẽ làm cho cầu có thể đi bộ và khởi động bộ đếm thời gian.Khi hẹn giờ đạt 0, cầu sẽ trở nên không thể đi bộ, khiến bất kỳ ai không nhanh đủ để té.

Làm cho cây cầu có thể đi bộ

Để bắt đầu, kịch bản sẽ cần làm cho cầu vững chắc, hoặc có thể va chạm và sau đó khởi động một bộ đếm thời gian cho đến khi nó trở nên không thể đi bộ.

  1. Để làm cho cây cầu có thể đi bộ, trong startTimer() , thay đổi tính minh bạch của cầu thành 0 (mờ) và tính CanCollide thành true.


    local function startTimer()
    -- Làm cho cầu trở nên hiển thị và có thể đi bộ
    bridge.Transparency = 0
    bridge.CanCollide = true
    end
  2. Để tạo một bộ đếm ngược, tạo một vòng lặp for với các giá trị sau.

    • Biến điều khiển : được đặt tên là count , đặt thành timerDuration .
    • Kết thúc : 0
    • Tăng lên : -1

    local function startTimer()
    -- Làm cho cầu trở nên hiển thị và có thể đi bộ
    bridge.Transparency = 0
    bridge.CanCollide = true
    for count = timerDuration, 0, -1 do
    end
    end
  3. Để hiển thị bộ đếm thời gian cho người chơi, thay đổi văn bản trong timerText để hiển thị số lần hiển thị bằng cách gõ timerText.Text = count .Mỗi khi vòng lặp for đi qua một lần lặp lại, nó sẽ hiển thị các người chơi số tiếp theo trong bộ đếm thời gian.


    for count = timerDuration, 0, -1 do
    timerText.Text = count
    end
  4. Sử dụng chức năng wait.task để làm cho vòng lặp for chỉ chạy một lần mỗi giây.


    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
  5. Chạy trò chơi. Khi bạn chạm vào nút, cầu phải xuất hiện và đồng hồ bắt đầu, sau đó hoàn thành.

Giữ cầu không bị khởi động lại

Tuy nhiên, nếu bạn di chuyển xung quanh nút, bộ đếm thời gian sẽ tiếp tục khởi động lại.

Điều này là do vòng lặp for được gọi mỗi khi bạn chạm vào nút và bắt đầu vòng lặp for từ đầu.Để giữ cho bộ đếm thời gian không bị khởi động liên tục, bạn sẽ cần phải thêm một boolean, một loại biến, sẽ kiểm soát xem có được phép gọi lại startTimer() hay không. Booleans được viết theo cùng một cách như các biến khác, nhưng thay vì sử dụng số hoặc chuỗi, chúng chỉ có thể được đặt thành true hoặc false.Trong trường hợp này, kịch bản sẽ sử dụng một boolean để kiểm tra xem có bộ đếm thời gian đang chạy trước khi bắt đầu không.

  1. Ở đầu cuối của kịch bản, dưới các biến của bạn, tạo một biến có tên là timerActive và đặt nó thành false vì chưa có ai nhấn nút cả.


    local timerDuration = 5
    local timerActive = false
    local function startTimer()
  2. Để chắc chắn rằng bộ đếm thời gian chỉ bắt đầu khi điều kiện timerActive boolean là false, hãy thêm một điều kiện thứ hai vào tuyên bố if ở buttonPressed() .


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and timerActive == false then
    startTimer()
    end
    end
  3. Để giữ startTimer() không bị chạy lại trước khi hết thời gian, hãy đặt boolean timerActive thành true.


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
  4. Trong chức năng startTimer(), sau vòng lặp for, thiết lập cầu trở lại các tính chất ban đầu bằng cách thay đổi độ trong suốt của cầu thành 0,8 và CanCollide thành false.


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
    -- Cho vòng lặp tính ngược từ thời gian trì hoãn
    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
    -- Làm cho cây cầu không thể đi bộ
    bridge.Transparency = 0.8
    bridge.CanCollide = false
    end
  5. Một điều cuối cùng để đặt lại cầu là thay đổi timerText thành một chuỗi trống như nó ban đầu.Sau đó, đặt boolean timerActive thành false.


    bridge.Transparency = 0.8
    bridge.CanCollide = false
    timerText.Text = ""
    timerActive = false
  6. Thử nghiệm và kiểm tra để đảm bảo cầu có thể được sử dụng nhiều lần.

Hoàn thành kịch bản cầu thời gian


local bridge = script.Parent
-- Nhận được nút khi nó được gõ vào Trình khám phá
local button = workspace.ButtonBridge
-- Nhận được phần cho hiển thị
local timerPart = workspace.TimerDisplay
-- Nhận được Văn bản sẽ hiển thị bộ đếm thời gian
local timerText = timerPart.SurfaceGui.TextLabel
-- Bao lâu người chơi phải vượt qua cây cầu
local timerDuration = 5
local timerActive = false
local function startTimer()
print("Countdown started")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- Cho vòng lặp tính ngược từ thời gian trì hoãn
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- Làm cho cây cầu không thể đi bộ
bridge.Transparency = 0.8
bridge.CanCollide = false
timerText.Text = ""
timerActive = false
end
local function buttonPressed(partTouched)
local character = partTouched.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
print("part touched")
if humanoid and timerActive == false then
print("starting timer")
startTimer()
end
end
button.Touched:Connect(buttonPressed)

Tổng quát

Vòng lặp có thể kết hợp với các phương tiện tương tác khác nhau để tạo ra những khoảnh khắc chơi vui vẻ.Trong hướng dẫn này, một cầu thời gian được tạo bằng một vòng lặp for hoạt động như một hẹn giờ.Trong thời gian đếm ngược, người chơi được cung cấp một thời gian giới hạn để vượt qua.