Latihan Loop - buat jembatan terhitung

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Proyek ini adalah contoh lain dari penggunaan loop for dengan cara yang praktis. Untuk jembatan ini, pemain akan menyentuh tombol untuk membuat jembatan dapat dilalui selama waktu terbatas sebelum menghilang. Untuk membuat timer dan menunjukkan sisa waktu kepada pemain, Anda akan menggunakan loop for.

Siapkan proyek

Jembatan ini dapat dimasukkan ke dalam proyek Roblox mana pun dengan tantangan berbasis gerakan, seperti obby.

Buat bagian

  1. Temukan tempat untuk membangun jembatan, seperti sungai atau celah besar dalam obby. Buat tiga bagian anchored seperti di bawah ini.

    • TimerDisplay
    • Bridge
    • ButtonBridge
  2. Saat tidak aktif, jembatan akan semi-transparan. Untuk melakukannya, pilih Bridge dan ubah propertinya.

    • Transparency = 0.8
    • CanCollide = False

Buat tampilan timer

Saat melintasi jembatan, pemain perlu melihat berapa detik yang tersisa sebelum jembatan menghilang. Salah satu cara untuk menampilkan gambar atau teks adalah dengan menambahkan objek yang disebut Surface GUI ke sebuah bagian. Surface GUIs juga dapat digunakan untuk membuat tanda dalam permainan, bilah kesehatan kustom, dan sistem inventaris. Tutorial ini akan menjelaskan ini dengan cepat, tetapi informasi lebih lanjut dapat ditemukan di bagian Tutorials.

  1. Pilih TimerDisplay dan tambahkan SurfaceGui. Kemudian, di dalam Surface Gui, tambahkan TextLabel.

  2. Pilih Surface GUI. Di Properties, lakukan perubahan berikut:

    • Ubah Face sehingga Anda dapat melihat label teks di depan timer di mana pemain melihat.
  3. Pilih TextLabel. Di Properties, lakukan perubahan berikut:

    • Atur Size menjadi {1, 0},{1, 0}.
    • Atur TextScaled menjadi true.
    • Atur Text menjadi kosong. Teks akan diperbarui menggunakan skrip.

Siapkan skrip

Sekarang setelah timer berada di tempat, buat skrip untuk mengontrol jembatan dan menampilkan angka hitung mundur kepada pemain.

  1. Di bagian Bridge, tambahkan skrip baru bernama TimedBridge. Dalam skrip itu, buat variabel berikut.

    local bridge = script.Parent
    local button = workspace.ButtonBridge
    local timerText = workspace.TimerDisplay.SurfaceGui.TextLabel
    -- Berapa lama jembatan akan tetap solid
    local timerDuration = 5

Kode interaksi sentuh

Untuk menggunakan jembatan, Anda perlu membuat dua fungsi. Satu fungsi akan membuat jembatan dapat dilalui dan menampilkan timer. Fungsi lainnya akan mendengarkan jika seorang pemain menyentuh tombol yang mengaktifkan jembatan.

  1. Buat fungsi baru bernama startTimer() dengan pernyataan print di dalamnya. Anda akan menggunakan pernyataan print untuk menguji kode Anda.

    local timerDuration = 5
    local function startTimer()
    print("Hitung mundur dimulai")
    end
  2. Kode fungsi bernama buttonPressed() untuk memeriksa apakah seorang humanoid menyentuh tombol. Fungsi ini harus menerima parameter partTouched, dan kemudian memiliki pernyataan if kosong jika humanoid terdeteksi di bagian itu.

    local function startTimer()
    print("Hitung mundur dimulai")
    end
    local function buttonPressed(partTouched)
    local character = partTouched.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    end
    end
  3. Untuk memulai timer, di dalam pernyataan if, panggil fungsi startTimer().

    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
  4. Di bawah akhir buttonPressed(), hubungkan fungsi buttonPressed() ke event Touched tombol.

    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
    button.Touched:Connect(buttonPressed)
  5. Jalankan proyek. Sentuh bagian tersebut dan periksa di jendela Output untuk melihat pernyataan print.

Tips pemecahan masalah

Pada titik ini, jika jembatan tidak berfungsi seperti yang diharapkan, coba salah satu dari yang berikut di bawah ini.

Masalah: Pesan kesalahan mengatakan: "... bukan anggota yang valid dari workspace".

  • Di skrip TimedBridge, periksa bahwa semua bagian dieja persis seperti yang terlihat di Explorer.

Masalah: Tidak dapat melihat bagian-bagian.

  • Pastikan semua tiga bagian terpasang.
  • Periksa properti Transparency untuk jembatan.

Buat timer

Setiap kali pemain melangkah di jembatan, startTimer() akan membuat jembatan dapat dilalui dan memulai timer. Setelah timer mencapai 0, jembatan akan menjadi tidak dapat dilalui, menyebabkan siapa pun yang tidak cukup cepat jatuh.

Buat jembatan dapat dilalui

Untuk memulai, skrip perlu membuat jembatan solid, atau dapat bertabrakan dan kemudian memulai timer hingga menjadi tidak dapat dilalui.

  1. Untuk membuat jembatan dapat dilalui, di dalam startTimer(), ubah properti Transparency jembatan menjadi 0 (opak) dan properti CanCollide menjadi true.

    local function startTimer()
    -- Buat jembatan terlihat dan dapat dilalui
    bridge.Transparency = 0
    bridge.CanCollide = true
    end
  2. Untuk membuat timer yang menghitung mundur, buat loop for dengan nilai berikut.

    • Variabel Kontrol: bernama count, diatur ke timerDuration.
    • Akhir: 0
    • Inkrement: -1
    local function startTimer()
    -- Buat jembatan terlihat dan dapat dilalui
    bridge.Transparency = 0
    bridge.CanCollide = true
    for count = timerDuration, 0, -1 do
    end
    end
  3. Untuk menunjukkan timer kepada pemain, ubah teks di timerText untuk menampilkan count dengan mengetik timerText.Text = count. Setiap kali loop for melewati iterasi, itu akan menunjukkan angka berikutnya di timer kepada pemain.

    for count = timerDuration, 0, -1 do
    timerText.Text = count
    end
  4. Gunakan fungsi task.wait untuk membuat loop for berjalan hanya sekali setiap detik.

    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
  5. Jalankan permainan. Ketika Anda menyentuh tombol, jembatan harus muncul dan timer akan mulai, kemudian selesai.

Cegah jembatan dari memulai ulang

Namun, perhatikan bahwa jika Anda bergerak di sekitar tombol, timer akan terus memulai ulang.

Ini karena loop for dipanggil setiap kali Anda menyentuh tombol dan memulai loop for dari awal. Untuk mencegah timer terus-menerus memulai ulang, Anda perlu menambahkan boolean, jenis variabel, yang akan mengontrol apakah startTimer() diizinkan untuk dipanggil lagi.

Boolean ditulis dengan cara yang sama seperti variabel lainnya, tetapi alih-alih menggunakan angka atau string, mereka hanya dapat diatur ke true atau false. Dalam situasi ini, skrip akan menggunakan boolean untuk memeriksa apakah timer saat ini sedang berjalan sebelum memulainya.

  1. Di bagian atas skrip Anda, di bawah variabel Anda, buat variabel bernama timerActive dan atur ke false karena belum ada yang menekan tombol.

    local timerDuration = 5
    local timerActive = false
    local function startTimer()
  2. Untuk memastikan timer hanya dimulai ketika boolean timerActive adalah false, tambahkan kondisi kedua ke pernyataan if di buttonPressed().

    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and timerActive == false then
    startTimer()
    end
    end
  3. Untuk mencegah startTimer() berjalan lagi sebelum timer habis, atur boolean timerActive menjadi true.

    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
  4. Di dalam fungsi startTimer(), setelah loop for, atur jembatan kembali ke properti aslinya dengan mengubah transparansi jembatan menjadi 0.8 dan CanCollide menjadi false.

    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
    -- Loop for yang menghitung mundur dari timerDuration
    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
    -- Buat jembatan tidak dapat dilalui
    bridge.Transparency = 0.8
    bridge.CanCollide = false
    end
  5. Satu hal terakhir untuk mengatur ulang jembatan adalah mengubah timerText menjadi string kosong seperti semula. Kemudian, atur boolean timerActive menjadi false.

    bridge.Transparency = 0.8
    bridge.CanCollide = false
    timerText.Text = ""
    timerActive = false
  6. Uji coba dan periksa untuk memastikan jembatan dapat digunakan beberapa kali.

Skrip jembatan terhitung lengkap

local bridge = script.Parent
-- Mendapatkan tombol seperti yang diketik di Explorer
local button = workspace.ButtonBridge
-- Mendapatkan bagian untuk tampilan
local timerPart = workspace.TimerDisplay
-- Mendapatkan Teks yang akan menampilkan timer
local timerText = timerPart.SurfaceGui.TextLabel
-- Berapa lama pemain harus menyeberangi jembatan
local timerDuration = 5
local timerActive = false
local function startTimer()
print("Hitung mundur dimulai")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- Loop for yang menghitung mundur dari timerDuration
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- Buat jembatan tidak dapat dilalui
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("bagian disentuh")
if humanoid and timerActive == false then
print("memulai timer")
startTimer()
end
end
button.Touched:Connect(buttonPressed)

Ringkasan

Loop dapat digabungkan dengan berbagai cara interaksi untuk menciptakan momen permainan yang menyenangkan. Dalam tutorial ini, jembatan terhitung dibuat menggunakan loop for yang berfungsi sebagai hitung mundur. Selama hitung mundur, pemain diberikan waktu terbatas untuk menyeberang.

©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.