Dự án này là một ví dụ khác về việc sử dụng vòng lặp for một 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 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 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 có các thử thách dựa trên chuyển động, như một obby.
Tạo các phần
Tìm một nơi để xây dựng 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ư 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, chọn Bridge và thay đổi các thuộc tính của nó.
- Transparency = 0.8
- CanCollide = False
Tạo hiển thị bộ đếm thời gian
Khi đi 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à 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 biển báo 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ể được tìm thấy trong phần 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 Face để 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 Size thành {1, 0},{1, 0}.
- Đặt TextScaled thành true.
- Đặt Text thành 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ờ bộ đếm thời gian đã được đặt, hãy tạo một kịch bản để đ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 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.Parentlocal button = workspace.ButtonBridgelocal timerText = workspace.TimerDisplay.SurfaceGui.TextLabel-- Thời gian mà cây cầu sẽ giữ vữnglocal 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 xem có người chơi nào chạm vào nút kích hoạt cây cầu hay không.
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 một humanoid có chạm vào nút hay không. Hàm này 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 humanoid đượ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 cuối 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 những điều sau đây.
Vấn đề: Thông báo lỗi nói rằng: "... không phải là một thành viên hợp lệ của workspace".
- Trong kịch bản TimedBridge, kiểm tra rằng tất cả các phần được đánh vần chính xác như chúng được thấy trong Explorer.
Vấn đề: Không thể thấy các phần.
- Đảm bảo rằng cả ba phần đều được Neo.
- Kiểm tra thuộc tính Transparency cho cây cầu.
Tạo bộ đếm thời gian
Mỗi khi 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 sẽ rơi xuống.
Làm cho cây cầu có thể đi được
Để bắt đầu, kịch bản 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 (không trong suốt) và thuộc tính CanCollide thành true.
local function startTimer()-- Làm cho cây cầu hiển thị và có thể đi đượcbridge.Transparency = 0bridge.CanCollide = trueendĐể tạo một bộ đếm thời gian đế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ên là count, đặt thành timerDuration.
- Kết thúc: 0
- Tăng: -1
local function startTimer()-- Làm cho cây cầu hiển thị và có thể đi đượcbridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendendĐể hiển thị bộ đếm thời gian cho người chơi, 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 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ò chơi. Khi bạn chạm vào nút, cây cầu sẽ xuất hiện và bộ đếm thời gian sẽ bắt đầu, sau đó hoàn thành.
Giữ cho cây cầu không khởi động lại
Tuy nhiên, hãy lưu ý rằng nếu bạn di chuyển xung quanh trên 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 đang được gọi mỗi lần 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 liên tục khởi động lại, bạn sẽ cần thêm một biến boolean, một loại biến, sẽ kiểm soát xem startTimer() có được phép gọi lại hay không.
Biến boolean đượ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 đặt thành true hoặc false. Trong tình huống này, kịch bản sẽ sử dụng một biến 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 kịch bản của bạn, dưới các biến của bạn, tạo một biến có tên 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 rằng bộ đếm thời gian chỉ bắt đầu khi biến 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Để giữ cho startTimer() không chạy lại trước khi bộ đếm thời gian hết, hãy đặt biến boolean timerActive thành true.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = trueTrong hàm startTimer(), sau vòng lặp for, đặt cây cầu trở lại các thuộc tính ban đầu của nó 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ư cách nó đã được ban đầu. Sau đó, đặt biến boolean timerActive thành false.
bridge.Transparency = 0.8bridge.CanCollide = falsetimerText.Text = ""timerActive = falseChơi thử và kiểm tra để đảm bảo rằng cây cầu có thể được sử dụng nhiều lần.
Kịch bản cây cầu có thời gian hoàn chỉnh
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 văn bản sẽ hiển thị bộ đếm thời gian
local timerText = timerPart.SurfaceGui.TextLabel
-- Thời gian mà người chơi phải 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 phương thức tương tác khác nhau để tạo ra những khoảnh khắc chơi game thú vị. Trong hướng dẫn này, một cây cầu có thời gian được tạo ra bằng cách sử dụng một 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 được cho một khoảng thời gian giới hạn để vượt qua.