Latihan Loop - buat jembatan terukur

*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 untuk waktu terbatas sebelum menghilang. Untuk membuat timer dan menunjukkan sisa waktu kepada pemain, Anda akan menggunakan loop for.

Siapkan proyek

Jembatan ini dapat disertakan dalam proyek Roblox apa pun yang memiliki 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. Ketika 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 banyak detik tersisa sebelum jembatan menghilang. Salah satu cara untuk menampilkan gambar atau teks adalah dengan menambahkan objek yang disebut Surface GUI ke suatu bagian. Surface GUIs juga dapat digunakan untuk membuat tanda dalam permainan, bilah kesehatan kustom, dan sistem inventaris. Tutorial ini akan membahas ini dengan cepat, tetapi informasi lebih lanjut dapat ditemukan di bagian Tutorials.

  1. Pilih TimerDisplay dan tambahkan SurfaceGui. Kemudian, sebagai orang tua dari Surface Gui, tambahkan TextLabel.

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

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

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

Siapkan skrip

Sekarang bahwa timer sudah siap, buat skrip untuk mengontrol jembatan dan menampilkan angka hitung mundur kepada pemain.

  1. Di bagian Bridge, tambahkan skrip baru bernama TimedBridge. Di skrip itu, buat variabel-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 apakah 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 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 acara 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 dan periksa di jendela Output untuk melihat pernyataan print.

Tips memecahkan masalah

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

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

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

Masalah: Tidak dapat melihat bagian-bagian.

  • Pastikan semua tiga bagian terpasang (Anchored).
  • Periksa sifat Transparansi untuk jembatan.

Buat timer

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

Buat jembatan dapat dilalui

Untuk memulai, skrip akan perlu membuat jembatan padat, atau dapat terdeteksi, dan kemudian memulai timer sampai menjadi tidak dapat dilalui.

  1. Untuk membuat jembatan dapat dilalui, di startTimer(), ubah properti Transparansi jembatan menjadi 0 (tidak transparan) 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-nilai berikut.

    • Variabel Kontrol: bernama count, diatur ke timerDuration.
    • Akhir: 0
    • Peningkatan: -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 hitungan dengan mengetik timerText.Text = count. Setiap kali loop for melewati iterasi, itu akan menunjukkan kepada pemain angka berikutnya di timer.


    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 pengalaman. Ketika Anda menyentuh tombol, jembatan harus muncul dan timer akan mulai, kemudian selesai.

Cegah jembatan dari memulai ulang

Namun, perhatikan, 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 mulai ulang, Anda perlu menambahkan boolean, jenis variabel, yang akan mengontrol apakah startTimer() diizinkan untuk dipanggil lagi.

Boolean ditulis dengan cara yang sama seperti variabel lain, 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 setel ke false karena tidak ada yang belum menekan tombol.


    local timerDuration = 5
    local timerActive = false
    local function startTimer()
  2. Untuk memastikan timer hanya dimulai saat 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() dijalankan lagi sebelum timer habis, atur boolean timerActive menjadi true.


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
  4. 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 mereset jembatan adalah mengubah timerText menjadi string kosong seperti awalnya. Kemudian, setel boolean timerActive ke 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 terukur lengkap


local bridge = script.Parent
-- Mendapatkan tombol saat 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 melintasi 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, sebuah jembatan terukur dibuat menggunakan loop for yang berfungsi sebagai hitung mundur. Selama hitung mundur, pemain diberikan waktu terbatas untuk melintas.

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