Döngüler pratik - 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ülerinin pratik bir şekilde nasıl kullanılabileceğine dair bir başka örnektir. Bu köprüde, oyuncular bir düğmeye dokunarak köprüyü sınırlı bir süre boyunca yürünebilir hale getirecek ve ardından kaybolacaktır. Bir zamanlayıcı oluşturmak ve kalan süreyi bir oyuncuya göstermek için for döngülerini kullanacaksınız.

Projeyi ayarlama

Bu köprü, bir obby gibi hareket tabanlı zorluklar içeren herhangi bir Roblox projesine dahil edilebilir.

Parçaları oluşturma

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

    • TimerDisplay
    • Bridge
    • ButtonBridge
  2. Pasif durumda, köprü yarı saydam olacaktır. Bunu yapmak için, Bridge'i seçin ve özelliklerini değiştirin.

    • Transparency = 0.8
    • CanCollide = False

Zamanlayıcı görüntüsünü oluşturma

Köprüden geçerken, oyuncular köprünün kaybolmadan önce ne kadar süre kaldığını görmelidir. Görüntüleri veya metinleri göstermek için bir parçaya Surface GUI adı verilen bir nesne ekleyebilirsiniz. Surface GUIs, oyun içi tabelalar, özel sağlık çubukları ve envanter sistemleri oluşturmak için de kullanılabilir. Bu eğitimde bu konuya hızlıca değinilecektir, ancak daha fazla bilgi Eğitimler bölümünde bulunabilir.

  1. TimerDisplay'i seçin ve bir SurfaceGui ekleyin. Ardından, Surface Gui'ya bir TextLabel ekleyin.

  2. Surface GUI'yi seçin. Özellikler bölümünde aşağıdaki değişiklikleri yapın:

    • Face'i değiştirin, böylece oyuncunun baktığı yerde zamanlayıcının önünde metin etiketi gözükecektir.
  3. TextLabel'i seçin. Özellikler bölümünde aşağıdaki değişiklikleri yapın:

    • Size{1, 0},{1, 0} olarak ayarlayın.
    • TextScaled'i true olarak ayarlayın.
    • Text'i boş bırakın. Metin, script ile güncellenecektir.

Script'i ayarlama

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

  1. Bridge parçasında, TimedBridge adında yeni bir script ekleyin. O 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 sağlam kalacağı
    local timerDuration = 5

Dokunma etkileşimini kodlama

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

  1. İçinde bir print ifadesi bulunan startTimer() adında yeni bir fonksiyon oluşturun. Print ifadesini kodunuzu test etmek için kullanacaksınız.

    local timerDuration = 5
    local function startTimer()
    print("Geri sayım başladı")
    end
  2. Bir humanoid'in düğmeye dokunup dokunmadığını kontrol etmek için buttonPressed() adında bir fonksiyon kodlayın. Fonksiyon, partTouched adında bir parametre almalı ve o parçanın içinde bir humanoid tespit edilirse 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 sonuna, buttonPressed() fonksiyonunu 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. Projeyi çalıştırın. Parçaya dokunun ve Output penceresinde print ifadesini kontrol edin.

Sorun giderme ipuçları

Bu noktada, köprü beklenildiği 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 Transparency özelliğini kontrol edin.

Zamanlayıcıyı oluşturma

Oyuncular köprüye adım attıklarında, startTimer() köprüyü yürünebilir hale getirecek ve zamanlayıcıyı başlatacaktır. Zamanlayıcı 0'a ulaştığında, köprü yürünemez hale gelecek ve yeterince hızlı olmayan herkes düşecektir.

Köprüyü yürünebilir hale getirme

Başlamak için, script köprüyü sağlam hale getirmeli veya çarpışabilir hale getirmeli ve ardından yürünemez hale gelene kadar bir zamanlayıcı başlatmalıdır.

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

    local function startTimer()
    -- Köprüyü görünür ve yürünebilir hale getir
    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ında, timerDuration olarak ayarlayın.
    • Son: 0
    • Artış: -1
    local function startTimer()
    -- Köprüyü görünür ve yürünebilir hale getir
    bridge.Transparency = 0
    bridge.CanCollide = true
    for count = timerDuration, 0, -1 do
    end
    end
  3. Zamanlayıcıyı oyunculara göstermek için, timerText içindeki metni count olarak değiştirmek için timerText.Text = count yazın. Her döngü geçişinde, oyunculara zamanlayıcının bir sonraki numarasını gösterecektir.

    for count = timerDuration, 0, -1 do
    timerText.Text = count
    end
  4. For döngüsünün yalnızca her 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. Oyunu çalıştırın. Düğmeye dokunduğunuzda, köprü görünmeli ve zamanlayıcı başlamalı, ardından tamamlanmalıdır.

Köprünün yeniden başlamasını engelleme

Ancak, düğmede hareket ederseniz, zamanlayıcı sürekli olarak yeniden başlayacaktır.

Bu, for döngüsünün her seferinde düğmeye dokunduğunuzda çağrılması ve for döngüsünü baştan başlatması nedeniyle olmaktadır. Zamanlayıcının sürekli olarak yeniden başlamasını engellemek için, startTimer()'ın tekrar çağrılıp çağrılmayacağını kontrol edecek bir boolean, bir tür değişken eklemeniz gerekecek.

Booleanlar, diğer değişkenler gibi yazılır, ancak sayılar veya dizeler yerine yalnızca true veya false olarak ayarlanabilirler. 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ünde, değişkenlerinizin altında, timerActive adında bir değişken oluşturun ve henüz kimse düğmeye basmadığı için false olarak ayarlayın.

    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() içindeki 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()'ın zamanlayıcı süresi dolmadan tekrar çalışmasını engellemek için, boolean timerActive'ı true olarak ayarlayın.

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

    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
    -- timerDuration'dan geri sayan for döngüsü
    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
    -- Köprüyü yürünemez hale getir
    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 dizeye değiştirmektir. Ardından, timerActive boolean'ını false olarak ayarlayın.

    bridge.Transparency = 0.8
    bridge.CanCollide = false
    timerText.Text = ""
    timerActive = false
  6. Oyun test edin ve köprünün birden fazla kez kullanılabildiğinden emin olun.

Tam zamanlı köprü scripti

local bridge = script.Parent
-- Explorer'da yazıldığı gibi düğmeyi alır
local button = workspace.ButtonBridge
-- Görüntü için parçayı alır
local timerPart = workspace.TimerDisplay
-- Zamanlayıcıyı gösterecek metni alır
local timerText = timerPart.SurfaceGui.TextLabel
-- Oyuncuların köprüyü geçmek için sahip olduğu 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 sayan for döngüsü
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- Köprüyü yürünemez hale getir
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 yöntemleriyle birleştirilerek eğlenceli oyun anları yaratabilir. Bu eğitimde, bir geri sayım işlevi gören bir for döngüsü kullanılarak zamanlı bir köprü oluşturulmuştur. Geri sayım sırasında, oyunculara geçmek için sınırlı bir süre verilmektedir.

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