Thực hành vòng lặp - tạo một cây cầu theo 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 for theo cách thực tiễn. Đối 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 được trong một khoảng thời gian hạn chế trước khi nó biến mất. Để tạo ra một bộ đếm thời gian và hiển thị thời gian còn lại cho người chơi, bạn sẽ sử dụng vòng lặp for.

Thiết lập dự án

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

Tạo các phần

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

    • TimerDisplay
    • Bridge
    • ButtonBridge
  2. Khi không hoạt động, cây cầu sẽ bán trong suốt. Để làm điều này, hãy chọn Cầu và thay đổi các thuộc tính của nó.

    • Trong suốt = 0.8
    • Có thể va chạm = False

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

Khi băng qua cây cầu, người chơi sẽ cần thấy có 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 gọi là Surface GUI vào một phần. Surface GUIs cũng có thể được sử dụng để tạo ra các biển hiệu trong trò chơi, thanh sức khỏe tùy chỉnh và hệ thống kho đồ. Hướng dẫn này sẽ đi qua điều này một cách nhanh chóng, nhưng thông tin thêm có thể tìm thấy trong mục Hướng dẫn.

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

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

    • Thay đổi Mặt để bạn có thể thấy nhãn văn bản ở mặt trước của bộ đếm thời gian nơi người chơi đang nhìn.
  3. Chọn TextLabel. Trong các thuộc tính, thực hiện các thay đổi sau:

    • Đặt Kích thước thành {1, 0},{1, 0}.
    • Đặt TextScaled thành true.
    • Để Văn bản trống. Văn bản sẽ được cập nhật thông qua mã.

Thiết lập mã

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

  1. Trong phần Bridge, thêm một mã mới có tên là TimedBridge. Trong mã đó, tạo các biến sau.


    local bridge = script.Parent
    local button = workspace.ButtonBridge
    local timerText = workspace.TimerDisplay.SurfaceGui.TextLabel
    -- Thời gian cây cầu sẽ ở trạng thái đầy
    local timerDuration = 5

Lập trình tương tác chạm

Để sử dụng cây cầu, bạn sẽ cần tạo hai hàm. Một hàm sẽ làm cho cây cầu có thể đi được và hiển thị bộ đếm thời gian. Hàm 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ây cầu.

  1. Tạo một hàm mới có tên startTimer() với một câu lệnh in bên trong. Bạn sẽ sử dụng câu lệnh in để kiểm tra mã của mình.


    local timerDuration = 5
    local function startTimer()
    print("Đếm ngược đã bắt đầu")
    end
  2. Lập trình một hàm có tên buttonPressed() để kiểm tra xem có một nhân vật nào chạm vào nút không. Hàm nên chấp nhận một tham số là partTouched, và sau đó có một câu lệnh if trống nếu một nhân vật được phát hiện trong phần đó.


    local function startTimer()
    print("Đếm ngược đã bắt đầu")
    end
    local function buttonPressed(partTouched)
    local character = partTouched.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    end
    end
  3. Để bắt đầu bộ đếm thời gian, trong câu lệnh if, gọi hàm startTimer().


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
  4. Dưới cùng của buttonPressed(), kết nối hàm 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 trong cửa sổ Output để xem câu lệnh in.

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

Tại thời điểm này, nếu cây cầu không hoạt động như mong muốn, hãy thử một trong các cách dưới đây.

Vấn đề: Thông báo lỗi nói: "... không phải là một thành viên hợp lệ của workspace".

  • Trong mã TimedBridge, kiểm tra đảm bảo rằng tất cả các phần được đánh vần chính xác như chúng xuất hiện trong Explorer.

Vấn đề: Không thấy các phần.

  • Đảm bảo rằng cả ba phần đều được cố định.
  • Kiểm tra thuộc tính Transparency cho cầu.

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

Bất cứ khi nào người chơi bước lên cây cầu, startTimer() sẽ làm cho cây cầu có thể đi được và bắt đầu bộ đếm thời gian. Khi bộ đếm thời gian đạt 0, cây cầu sẽ trở nên không thể đi được, khiến bất kỳ ai không nhanh chóng sẽ rơi xuống.

Làm cho cây cầu có thể đi được

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

  1. Để làm cho cây cầu có thể đi được, trong startTimer(), thay đổi thuộc tính Transparency của cây cầu thành 0 (hàm không trong suốt) và thuộc tính CanCollide thành true.


    local function startTimer()
    -- Làm cho cây cầu có thể nhìn thấy và đi được
    bridge.Transparency = 0
    bridge.CanCollide = true
    end
  2. Để tạo ra một bộ đếm thời gian đếm ngược, hãy tạo một vòng lặp for với các giá trị sau.

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

    local function startTimer()
    -- Làm cho cây cầu có thể nhìn thấy và đi được
    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, hãy thay đổi văn bản trong timerText để hiển thị count bằng cách gõ timerText.Text = count. Mỗi lần vòng lặp for đi qua một lần lặp, nó sẽ hiển thị cho 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 một hàm task.wait để làm cho vòng lặp for chạy chỉ 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ải nghiệm. Khi bạn chạm vào nút, cầu nên xuất hiện và đồng hồ đếm thời gian sẽ bắt đầu, sau đó hoàn thành.

Giữ cây cầu không tự khởi động lại

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

Điều này xảy ra vì vòng lặp for đang đượ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 lại liên tục, bạn sẽ cần thêm một boolean, một loại biến, sẽ kiểm soát xem có cho phép startTimer() được gọi lại hay không.

Bonlean được viết giống 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 thiết lập thành true hoặc false. Trong tình huống này, mã sẽ sử dụng một boolean để kiểm tra xem bộ đếm thời gian hiện đang chạy hay không trước khi bắt đầu nó.

  1. Ở đầu mã của bạn, phía dưới các biến của bạn, hãy tạo một biến có tên là timerActive và đặt nó thành false vì chưa ai đã nhấn nút.


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


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


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
  4. Trong hàm startTimer(), sau vòng lặp for, hãy đặt lại cây cầu về các thuộc tính ban đầu bằng cách thay đổi độ trong suốt của cây cầu thành 0.8 và CanCollide thành false.


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
    -- Vòng lặp for đếm ngược từ timerDuration
    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
    -- Làm cho cây cầu không thể đi được
    bridge.Transparency = 0.8
    bridge.CanCollide = false
    end
  5. Một điều cuối cùng để đặt lại cây cầu là thay đổi timerText thành một chuỗi trống như 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ây cầu có thể được sử dụng nhiều lần.

Mã hoàn chỉnh cho cây cầu theo thời gian


local bridge = script.Parent
-- Lấy nút như nó được gõ trong Explorer
local button = workspace.ButtonBridge
-- Lấy phần cho hiển thị
local timerPart = workspace.TimerDisplay
-- Lấy Text sẽ hiển thị bộ đếm thời gian
local timerText = timerPart.SurfaceGui.TextLabel
-- Thời gian mà người chơi có để vượt qua cây cầu
local timerDuration = 5
local timerActive = false
local function startTimer()
print("Đếm ngược đã bắt đầu")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- Vòng lặp for đếm ngược từ timerDuration
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- Làm cho cây cầu không thể đi được
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("phần đã chạm")
if humanoid and timerActive == false then
print("bắt đầu bộ đếm thời gian")
startTimer()
end
end
button.Touched:Connect(buttonPressed)

Tóm tắt

Các vòng lặp có thể được kết hợp với các cách tương tác khác nhau để tạo ra những khoảnh khắc chơi game thú vị. Trong tutorial này, một cây cầu theo thời gian được tạo ra bằng cách sử dụng vòng lặp for hoạt động như một bộ đếm ngược. Trong suốt thời gian đếm ngược, người chơi sẽ được cho một khoảng thời gian hạn chế để vượt qua.

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