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

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.
Chọn TimerDisplay và thêm một SurfaceGui. Sau đó, gán cho Surface Gui, thêm một TextLabel.

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.
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.
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.Parentlocal button = workspace.ButtonBridgelocal timerText = workspace.TimerDisplay.SurfaceGui.TextLabel-- Thời gian cây cầu sẽ ở trạng thái đầylocal 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.
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 = 5local function startTimer()print("Đếm ngược đã bắt đầu")endLậ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")endlocal function buttonPressed(partTouched)local character = partTouched.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenendendĐể 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.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendDướ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.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbutton.Touched:Connect(buttonPressed)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.
Để 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 đượcbridge.Transparency = 0bridge.CanCollide = trueendĐể 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 đượcbridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendendĐể 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 dotimerText.Text = countendSử 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 dotimerText.Text = counttask.wait(1)endChạ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ó.
Ở đầ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 = 5local timerActive = falselocal function startTimer()Để đả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.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and timerActive == false thenstartTimer()endendĐể 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 = truebridge.Transparency = 0bridge.CanCollide = trueTrong 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 = truebridge.Transparency = 0bridge.CanCollide = true-- Vòng lặp for đếm ngược từ timerDurationfor count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end-- Làm cho cây cầu không thể đi đượcbridge.Transparency = 0.8bridge.CanCollide = falseendMộ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.8bridge.CanCollide = falsetimerText.Text = ""timerActive = falseThử 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.