Döngü Pratiği - Zamanlı Köprü Oluşturma

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Bu proje, for döngülerini pratik bir şekilde kullanmanın bir örneğidir. Bu köprü için oyuncular, köprüyü kaybolmadan önce sınırlı bir süre boyunca geçilebilir hale getirmek için bir düğmeye dokunacaklar. Bir zamanlayıcı oluşturmak ve oyuncuya kalan süreyi göstermek için for döngüleri kullanacaksınız.

Projeyi Ayarlayın

Bu köprü, bir obby gibi hareket temelli zorluklar içeren her Roblox projesine dahil edilebilir.

Parçaları Oluşturun

  1. Bir köprü inşa etmek için bir yer bulun, örneğin bir nehir ya da bir obby'deki büyük bir boşluk. Aşağıdaki gibi üç ankrajlı parça oluşturun.

    • ZamanlayıcıGörüntüsü
    • Köprü
    • DüğmeKöprü
  2. Aktif olmadığında, köprü yarı saydam olacak. Bunu yapmak için Köprü'yü seçin ve özelliklerini değiştirin.

    • Saydamlık = 0.8
    • Çarpışabilir = Yanlış

Zamanlayıcı Görüntüsünü Oluşturun

Köprüden geçerken, oyuncuların köprünün kaybolmadan önce kaç saniye kaldığını görmeleri gerekecek. Resimleri veya metinleri görüntülemenin bir yolu, bir parçaya Surface GUI adı verilen bir nesne eklemektir. Surface GUI'ler, oyun içi işaretler, özel sağlık çubukları ve envanter sistemleri oluşturmak için de kullanılabilir. Bu eğitim bunu hızlı bir şekilde geçecektir, ancak daha fazla bilgi Eğitimler bölümünde bulunabilir.

  1. ZamanlayıcıGörüntüsü'nü seçin ve bir SurfaceGui ekleyin. Ardından, Surface Gui'ye bir TextLabel ekleyin.

  2. Surface GUI'yi seçin. Özellikler kısmında aşağıdaki değişiklikleri yapın:

    • Yüz kısmını değiştirin, böylece oyuncunun baktığı yerden zamanlayıcının önünde metin etiketini görebilir.
  3. TextLabel'ı seçin. Özellikler kısmında aşağıdaki değişiklikleri yapın:

    • Boyut'u {1, 0},{1, 0} olarak ayarlayın.
    • MetinÖlçekli'yi true olarak ayarlayın.
    • Metin'i boş bırakın. Metin, script kullanarak güncellenecektir.

Script'i Ayarlayın

Zamanlayıcı yerinde olduğuna göre, köprüyü kontrol etmek ve oyunculara geri sayım numarasını göstermek için bir script oluşturun.

  1. Köprü parçasında, TimedBridge adında yeni bir script ekleyin. Bu scriptte, aşağıdaki değişkenleri oluşturun.


    local bridge = script.Parent
    local button = workspace.ButtonBridge
    local timerText = workspace.TimerDisplay.SurfaceGui.TextLabel
    -- Köprünün ne kadar süre boyunca sağlam kalacağı
    local timerDuration = 5

Dokunma Etkileşimini Kodlayın

Köprüyü kullanmak için iki işlev oluşturmanız gerekecek. Bir işlev köprüyü geçilebilir hale getirecek ve zamanlayıcıyı gösterecek. Diğer işlev ise köprüyü etkinleştiren düğmeye bir oyuncunun dokunup dokunmadığını dinleyecek.

  1. İçine bir print ifadesi olan startTimer() adlı yeni bir işlev oluşturun. Kodu test etmek için print ifadesini kullanacaksınız.


    local timerDuration = 5
    local function startTimer()
    print("Geri sayım başladı")
    end
  2. Bir humanoid'un düğmeye dokunup dokunmadığını kontrol etmek için buttonPressed() adlı bir işlev kodlayın. İşlev, bir parametre olan partTouched'ı kabul etmeli ve ardından bir humanoid algılandığında boş bir if ifadesi içermelidir.


    local function startTimer()
    print("Geri sayım başladı")
    end
    local function buttonPressed(partTouched)
    local character = partTouched.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    end
    end
  3. Zamanlayıcıyı başlatmak için, if ifadesinin içinde startTimer() fonksiyonunu çağırın.


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
  4. buttonPressed()'in sonunda, buttonPressed() işlevini düğmenin Touched olayına bağlayın.


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
    button.Touched:Connect(buttonPressed)
  5. Projekti çalıştırın. Parçaya dokunun ve çıkış penceresinde print ifadesini görmek için kontrol edin.

Sorun Giderme İpuçları

Bu noktada, köprü istediğiniz gibi çalışmıyorsa, aşağıdakilerden birini deneyin.

Sorun: "... workspace'in geçerli bir üyesi değil" hatası.

  • TimedBridge scriptinde, tüm parçaların Explorer'da görüldüğü gibi tam olarak yazıldığını kontrol edin.

Sorun: Parçaları göremiyorum.

  • Tüm üç parçanın Ankrajlı olduğundan emin olun.
  • Köprünün Saydamlık özelliğini kontrol edin.

Zamanlayıcıyı Oluşturun

Oyuncular köprüde durduğunda startTimer(), köprüyü geçilebilir hale getirecek ve zamanlayıcıyı başlatacaktır. Zamanlayıcı 0'a ulaştığında, köprü geçilemez hale gelecek ve yeterince hızlı olmayan herhangi biri düşecektir.

Köprüyü Geçilebilir Hale Getirin

Başlangıç olarak, script köprüyü sağlam veya çarpışabilir hale getirmeli ve sonra geçilemez hale gelene kadar bir zamanlayıcı başlatmalıdır.

  1. Köprüyü geçilebilir hale getirmek için, startTimer() içinde köprünün Saydamlık özelliğini 0 (opak) ve CanCollide özelliğini true olarak değiştirin.


    local function startTimer()
    -- Köprüyü görünür ve geçilebilir yap
    bridge.Transparency = 0
    bridge.CanCollide = true
    end
  2. Geri sayım yapan bir zamanlayıcı oluşturmak için aşağıdaki değerlerle bir for döngüsü oluşturun.

    • Kontrol Değişkeni: count adıyla, timerDuration olarak ayarlandı.
    • Bitiş: 0
    • Artış: -1

    local function startTimer()
    -- Köprüyü görünür ve geçilebilir yap
    bridge.Transparency = 0
    bridge.CanCollide = true
    for count = timerDuration, 0, -1 do
    end
    end
  3. Zamanlayıcıyı oyunculara gösterebilmek için, timerText içindeki metni sayıyı göstermek üzere timerText.Text = count olarak değiştirebilirsiniz. Döngü her döndüğünde, oyunculara zamanlayıcıdaki bir sonraki sayıyı gösterecektir.


    for count = timerDuration, 0, -1 do
    timerText.Text = count
    end
  4. Döngünün yalnızca bir saniyede bir çalışmasını sağlamak için bir task.wait fonksiyonu kullanın.


    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
  5. Deneyimi çalıştırın. Düğmeye dokunduğunuzda köprü görünmeli ve zamanlayıcı başlayıp tamamlanmalıdır.

Köprünün Yeniden Başlamasını Engelleyin

Ancak, düğmede hareket ettiğinizde zamanlayıcının sürekli yeniden başlamasını gözlemleyin.

Bu, for döngüsünün her dokunuşta çağrıldığından ve for döngüsüne baştan başladığından kaynaklanmaktadır. Zamanlayıcının sürekli yeniden başlamasını engellemek için, bir boolean eklemeniz gerekecek. Bu tür bir değişken, startTimer()'in tekrar çağrılıp çağrılmayacağını kontrol edecektir.

Booleanlar, diğer değişkenler gibi yazılır, ancak sayılar veya dizgeler yerine yalnızca true veya false olarak ayarlanabilir. Bu durumda, script zamanlayıcının şu anda çalışıp çalışmadığını kontrol etmek için bir boolean kullanacaktır.

  1. Script'inizin en üstüne, değişkenlerinizin altına, timerActive adlı bir değişken oluşturun ve bunu false olarak ayarlayın; çünkü henüz kimse düğmeye basmamıştır.


    local timerDuration = 5
    local timerActive = false
    local function startTimer()
  2. Zamanlayıcının yalnızca timerActive boolean'ı false olduğunda başlamasını sağlamak için, buttonPressed()'teki if ifadesine ikinci bir koşul ekleyin.


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and timerActive == false then
    startTimer()
    end
    end
  3. startTimer()'in zamanlayıcısı dolmadan tekrar çalışmasını engellemek için, boolean timerActive değerini true olarak ayarlayın.


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
  4. startTimer() fonksiyonunda, for döngüsü sonrasında köprüyü geri orijinal özelliklerine döndürmek için köprünün saydamlık değerini 0.8 ve CanCollide özelliğini false olarak değiştirin.


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
    -- timerDuration'dan geri sayım yapan for döngüsü
    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
    -- Köprüyü geçilemez yap
    bridge.Transparency = 0.8
    bridge.CanCollide = false
    end
  5. Köprüyü sıfırlamak için son bir şey, timerText'i başlangıçta olduğu gibi boş bir dize yapmaktır. Ardından, timerActive boolean'ını false olarak ayarlayın.


    bridge.Transparency = 0.8
    bridge.CanCollide = false
    timerText.Text = ""
    timerActive = false
  6. Oyun testini yapın ve köprünün birden fazla kez kullanılabileceğini doğrulayın.

Zamanlı köprü script'inin tam hali


local bridge = script.Parent
-- Explorer'da yazıldığı gibi düğmeyi al
local button = workspace.ButtonBridge
-- Zamanlayıcı parçasını al
local timerPart = workspace.TimerDisplay
-- Zamanlayıcıyı gösterecek metni al
local timerText = timerPart.SurfaceGui.TextLabel
-- Oyuncuların köprüyü geçmesi için olan süre
local timerDuration = 5
local timerActive = false
local function startTimer()
print("Geri sayım başladı")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- timerDuration'dan geri sayım yapan for döngüsü
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- Köprüyü geçilemez yap
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("parça dokunuldu")
if humanoid and timerActive == false then
print("zamanlayıcı başlatılıyor")
startTimer()
end
end
button.Touched:Connect(buttonPressed)

Özet

Döngüler, farklı etkileşim yolları ile birleştirilerek eğlenceli oyun anları yaratabilir. Bu eğitimde, bir geri sayım işlevi olarak çalışan bir for döngüsü ile zamanlı bir köprü oluşturulmuştur. Geri sayım süresince, oyunculara köprüyü geçmek için sınırlı bir süre verilmiştir.

©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.