Kontrol yapılarının birden fazla koşulu olabilir.Anahtar kelimeler else ve elseif birkaç koşul altında neler olması gerektiğine dair ek senaryolar oluşturabilir.Syntaxsi şöyle görünüyor:
dp ve diğer için sentaks gösterir
if isGreen thenprint("Go")elseif isYellow thenprint("Slow")elseif isPedestrians thenprint("Wait")elseprint("stop")end
Bu projede, else ve elseif parkur kursunu kodlamak için kullanılır ve koşucular bitiş sürelerine bağlı olarak ödül alır.

Birden fazla koşul kodu
Bu proje için, oyunculara ödül vermek için her madalya için benzersiz bir if ifadesi yazabilirsiniz, ancak bu çok fazla zaman alır.durum, aşağıdaki hayali kodu alın.
Tüm if ifadeleri
if finishTime < 5 then-- Altın madalya alınendif finishTime >= 5 and <= 10 then-- Gümüş madalya alınendif finishTime > 10 and <= 15 then-- Bronz madalya alınend
Bunu kodlamanın daha okunabilir ve verimli bir yolu, tek bir if ifadesini kullanmak ve önceki koşulların doğru olmadığını test etmek için anahtar kelime elseif kullanmaktır.
Kullanır elif ve başka ve diğer
if finishTime < 5 then-- Altın madalya alınelseif finishTime >= 5 and <= 10 then-- Gümüş madalya alınelseif finishTime > 10 and <= 15 then-- Bronz madalya alınend
Eğer/sonra ifadesi çalıştığında, en başta başlayacak ve sadece bulduğu ilk doğru koşul için kodu çalıştıracak.
Yarış kursunu kurun
Kursun başlangıç noktasını ve bitiş çizgisini yerleştirerek başlayın ve ardından oyuncuyu zamanlayan ve farklı madalyaları ödüllendiren bir senaryo oluşturun.
Bitirme Çizgisi adında sabitlenmiş bir parça oluştur.Testi hızlandırmak için, başlangıcı ve sonu yakınlaştırın.Senaryoyu bitirdikten sonra bitiş çizgisini hareket ettirebilirsiniz.
Parçayı Bitir >Tüm Kurs >FinishLine'da, YarışYöneticisi adlı bir senaryo ekleyin.Sonra, yarış başladığından beri kaç saniye geçtiğini depolayan bir değişken ve FinishLine'a referans veren ikinci bir değişken ekleyin.
local finishLine = script.Parentlocal timePassed = 0finish() adlı bir işlev oluşturun.
local timePassed = 0local finishLine = script.Parentlocal function finish()endKendi sahip ol:
- Bir oyuncu buna dokunduğunda çalışan partTouched() isimli bir işlev kodlayın finish() .
- Bitirme hattı parçasını partTouched() 'ye bağlayın.
- Kodunuzu aşağıdaki örnek ile karşılaştırın.
local function finish()print("touched the finish line")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)Oynatma ve bitiş çizgisine dokunduğunuzda finish() çağrıldığını kontrol edin.
Finish()'un tekrarlanmasını engelle
Şu anda, bir oyuncu bitiş çizgisine dokunduğunda, finish() oyuncu parçaya dokunduğu sürece sürekli olarak çağrılır.
Finish()'un yalnızca bir kez çağrılmasını sağlamak için booleen veya doğru veya yanlış depolayan bir değişken kullanın.
Yeni bir değişken oluşturun raceActive ve onu true olarak ayarlayın.
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- Oyuncu bitiş çizgisi parçasına dokunduğunda her zaman çalışırlocal function finish()if ifadesine ikinci bir koşul ekleyerek yarışAktif'in önce finish() çağrılıp çağrılmadığını kontrol edin.
local function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endendfinish() 'nin tekrar çağrılmamasını durdurmak için, raceActive 'yi false 'a ayarlayın.
local function finish()print("touched the finish line")raceActive = falseendSadece bir kez test yazdırma ifadesini gördüğünüzden emin olmak için oyununuzu test edin.
Zamanı takip et
Bir if ifadesi gibi, bir while döngüsü de çalışması gerektiğini görmek için bir koşulu kullanabilir.oyuncuzamanlamak için, sadece raceActive booleen true olduğunda çalışan bir while döngüsü kullanarak bir zamanlayıcı oluşturun.
Senaryonun en altında, while raceActive == true do yazın. Otomatik olarak tamamlamak ve end eklemek için Enter tuşuna basın.
finishLine.Touched:Connect(partTouched)while raceActive == true doendOyuncuları zamanlamak için, döngüde, her saniye bir kez timePassed değişkenine 1 ekleyin. Çalışmanızı test etmek için bir yazdırma ifadesi ekleyin.
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)endOyunu oynayın ve her saniye görüntüsünün Çıktı penceresinde gösterildiğinden emin olun.
Ödül oyuncu madalyaları
Bitirmek için, oyunculara sözleşme imzalamadayalı olarak farklı bir ödül madalyası vermek için çok sayıda koşullu bir if ifadesi kullanın.Oyuncunun bitiş zamanını kontrol etmek ve onlara doğru madalyayı vermek için bir if ifadesi ve iki elif ifadesi kullanın.
Her madalya verilebileceğini onaylamak için, yazıcı ifadelerini kullanın.
local function finish()raceActive = falseprint("You finished in " .. timePassed)endBir altın madalya ödülü vermek için, timePassed istenen bitiş süresine karşı karşılaştıran bir if ifadesi kodlayın.Bu örnek, oyuncunun süresinin 10 saniyeden az veya eşit olup olmadığını kontrol eder.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")endendAltın madalyanın verilebileceğini test et ve onayla.
Ek koşullar ekleyin
Artık altın madalya için test ettiniz, diğer madalyalar için kullanılan elseif anahtar kelime ile kod koşulları.
Gümüş madalya için, elseif ve bir sonraki istenen zaman aralığını kullanın.Bu örnekte, menzil 10 saniyeden büyük, ancak 20 saniyeden az veya eşit.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")endendBronz madalya için aynı modeli kullanın. Kodunuzu aşağıdaki örnek ile kontrol edin.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("You get a bronze medal!")endendGümüş ve bronz madalyalar için oyun testi.
Sorun giderme ipuçları
Gümüş ve bronz metaller görünmüyorsa, aşağıdan birini deneyin.
- Her elseif koşulundan sonra bir sonra gelmelidir.
- In partTouched() , if ifadesinin ikinci koşulunun == gibi kullandığından emin olun, örneğin raceActive == true .
- Her elseif birinin sınırında olduğundan emin olun. Her elseif koşul if/then ifadesinin ilk satırından ve son end sırasından olmalıdır.
Diğer koşulu ekleyin
Oyuncu hiçbir madalyayı kazanmadıysa, tekrar denemesini teşvik etmelisiniz.Bu durumda, else ifadesini kullanarak, başka koşul yoksa gerçek olursa bir mesaj gösterebilirsiniz.
Son elseif ve üstünde end , yeni bir satır başlat ve else yaz. Sonra eklemesiniz .Diğerlerinin altında, yeniden denemelerini istemek için bir yazıcı ifadesi kullanın.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("You get a bronze medal!")elseprint("Try again!")endend
2 . Diğer mesajı görmek için oynatma testi yapın.
Özet
Kontrol yapılarının birden fazla senaryosu olabilir.Kontrol etmek için başlangıç ifadesini ayarlamak ve ardından gerekli sayıda elseif koşul eklemek için ifadeleri kullanın.Son olarak, tüm verilen koşullar yanlışsa ne olması gerektiğini belirtmek için else kullanın.
Tepeden başlayarak, tüm koşullar kontrol edilecek ve sadece ilk gerçek koşul kodu çalıştıracak.Kalan koşullar kontrol edilmeyecek ve kodları çalışmayacak.
Projeyi bitirdikten sonra, birkaç ekstra yol ile yeni elemanlar eklemek için kodu genişletebilirsiniz.
- Oyuncuların bitirirken başlangıç çizgisine dokunarak yarışı tekrarlayabilmeleri için kod ekleyin.
- Yarış sırasında zamanı görüntülemenin bir yolunu tasarlayın.Bir parçada bir Surface GUI kullanarak zamanı görüntüleyebilirsiniz, örneğin Zamanlı Köprü oluşturma eğitiminde.
Completed script
local timePassed = 0
local finishLine = script.Parent
-- Yarış sona erdiğinde bit() ve zamanlayıcının tekrarlanmasını engellemek için kullanılır
local raceActive = true
-- Oyuncu bitiş çizgisine dokunduğunda ve onlara bir ödül gösterdiğinde çalışır
local function finish()
raceActive = false
print("You finished in " .. timePassed)
if timePassed <= 10 then
print("You get a gold medal!")
elseif timePassed > 10 and timePassed <= 20 then
print("You get a silver medal!")
elseif timePassed > 20 and timePassed <= 30 then
print("You get a bronze medal!")
else
print("Try again!")
end
end
-- Bir oyuncu bir yarış aktif olduğunda parçaya dokunduğunu kontrol eder
local function partTouched(otherPart)
local character = otherPart.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid and raceActive == true then
finish()
end
end
finishLine.Touched:Connect(partTouched)
-- Yarış aktifken yarış süresini izler. Senaryonun en altında olması gerekir.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end