Kontrol yapılarının birden fazla koşula sahip olabilir. Kelimeler else ve elseif şartları, birkaç koşul için ek görüş senaryoları oluşturabilir. Syntax şu gibi görünür:
else veya başka bir ifade için dilini gösterir
if isGreen thenprint("Go")elseif isYellow thenprint("Slow")elseif isPedestrians thenprint("Wait")elseprint("stop")end
Bu projette, else ve elseif kullanıcıların bitiş süresine bağlı olarak ödüller aldığı bir parkur kursu kodlanır.
Çok Şart Kodlama
Bu proje için, her madalya için kullanıcılara verilecek benzersiz bir ifadeyi yazabilirsiniz, ancak bu çok zaman alabilir. durum, aşağıdaki hayalet kodu alın.
Tüm ifadeler
if finishTime < 5 then-- Bir altın madalya alınendif finishTime >= 5 and <= 10 then-- Bir gümüş madalya alınendif finishTime > 10 and <= 15 then-- Bronz bir madalya alınend
Bunu yapmanın daha okunabilir ve verimli bir yolu, tek bir ifadeyi kullanmak ve önceki koşullar doğru olmadığından test için alternatif koşullar sağlamak için anahtar kelimeyi elseif kullanmaktır.
else veya else'i kullanır
if finishTime < 5 then-- Bir altın madalya alınelseif finishTime >= 5 and <= 10 then-- Bir gümüş madalya alınelseif finishTime > 10 and <= 15 then-- Bronz bir madalya alınend
When the if/then statement runs, it'll start at the top and only run the code for the first true condition it finds.
Yarış Pisti Ayarlanıyor
Kursun başlangıcını yerleştirin ve bitirme çizgisini, ardından oyuncuyu zamanlandırmak ve farklı madalyalar vermek için bir senaryo oluşturun.
FinishLine adında sabit bir parça oluşturun. Daha hızlı test yapmak için başlangıcı ve sonunu birbirine yakın yerlerde yerleştirin. Skripti bitirdikten sonra bitiş çizgisini hareket ettirebilirsiniz.
FinishLine'da, yarışın başladığından bu yana kaç saniye olduğunu depolamak için adı RaceManager olan bir skript ekleyin. Ardından, FinishLine'ı referans etmek için bir değişken ekleyin.
local finishLine = script.Parentlocal timePassed = 0finish() adında bir işlev oluşturun.
local timePassed = 0local finishLine = script.Parentlocal function finish()endsahip ol:
- Oyuncunun dokunmasıyla çalışan partTouched() adlı bir işlevi kodlayın.
- Bitiş çizgi parçasını partTouched() 'e bağla.
- Kodunuzu aşağıdaki örnekle 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)Finish çizgisine dokunduğunuzda finish() çağrıldığını test edin ve kontrol edin.
Finish()'ı tekrarlamaktan kaçın
Şu anda, bir oyuncu bitiş çizgisine dokunduğunda, finish() oyuncu o bölgeye dokunana kadar sürekli olarak çağrılır.
Finish()'nin sadece bir kez çağrılmasını sağlamak için bir boz , gerçek veya falso depolayan bir değişken kullanın.
Yeni bir değişken oluşturun ve onu raceActive olarak ayarlayın.
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- Oyuncu'nun bitiş çizgisi parçasına dokunduğunda her zaman çalışırlocal function finish()YarışmaAktif'in doğru olup olmadığını kontrol etmek için ifadesine bir ikinci koşul ekleyin finish() .
local function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endendfinish() ın tekrar çağrılmasını durdurmak için, raceActive 'yı false olarak ayarla.
local function finish()print("touched the finish line")raceActive = falseendTest sürümünüzü oynayarak sadece test raporunuzu bir kez gördüğünüzden emin olun.
Zamanı Takip Etme
Bir ifade gibi, bir while 루프 ayrıca koşul kullanarak görmek için ifade edilebilirliğini görebilir. Bir oyuncuyu zamanlayabilmek için, raceActive ismi gerçekten yalnızca do ifadesini kullanan bir timer oluşturun.
Skriptin altındaki while raceActive == true do yazınız. Enter'a basın ve otomatik olarak tamamlayın ve end ekleyin.
finishLine.Touched:Connect(partTouched)while raceActive == true doendOyuncuları takip etmek için, döngüde, her saniye timePassed değişkenine 1 ekleyin. İşinizi test etmek için bir print ifadesi ekleyin.
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)endOyunu oynayın ve görüntülenen her saniyi Kontrol Panelinde gördüğünüzden emin olun.
Oyuncuya Madalyası Verilmesi
Bitiş olarak, oyunculara sözleşme imzalamagöre farklı bir ödül madeni para vermek için ifadeyi kullanın. Bir ifadeyi kullanın ve iki else ifadeyi kullanın, oyuncunun bitiş zamanını kontrol etmek ve onlara doğru ödülü vermek için ödülü vermek için.
Her madalya ödüllendirilebilir olduğunu onaylamak için print ifadelerini kullanın.
local function finish()raceActive = falseprint("You finished in " .. timePassed)endBir altın madalya ödüllendirmek için, timePassed ile istediğiniz bitiş zamanını karşılaştıran bir ifadeyi kodlayın. Bu örnek, oyuncunun zamanının 10 saniyeden daha az veya eşit olduğunu test eder.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")endendAltın madalya ödüllendirilebildiğini test edin ve onaylayın.
Ekstra Şartlar Ekleme
Altın madalya için test yaptığınızda, elseif kelimesini kullanan diğer madalyalar için kod koşullarını test edin.
Gümüş madalya için elseif ve bir sonraki istediğiniz zaman aralığını kullanın. Bu örnekte, menzil 10 saniyeden daha büyük, ancak 20 saniyeden daha 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 madalyası için aynı patterni kullanın. Aşağıdaki örnekle kodunuzu 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 oynatma testi.
Hata ayıklama ipuçları
Gümüş ve Bronz metalleri görmediyseniz, aşağıdakilerden birini deneyin.
- Her bir elseifnın durumunun ardından bir then olmalıdır.
- In partTouched() , if statement'in ikinci kondisyonunun == kullanıyor olduğundan emin olun, raceActive == true gibi.
- Her bir elseif ın içinde olduğuna emin olun. Her bir elseif ın koşulu if/then ifade ile ilgili ilk satır arasında olmalıdır ve sonu bitirile bitmelidir.
Diğer Şartı Ekleme
Oyuncu herhangi bir madalya kazanmadıysa, teşvik etmelisiniz onları tekrar denemelerini. Bu durumda, else ifadeyi kullanabilirsiniz, which runs if başka bir şart yoksa koşulları doğruysa, bir mesaj göstermek için.
Son elseif ve end altındaki bir satır başlat ve else yaz. 1> Do not1> add then. Beneath else, use a print statement to prompt them to try again.
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 oyun testi yapın.
Özet
Kontrol yapılarının birden fazla senaryosu olabilir. Açıklamaları kullanın ve ardından gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse
Üstte başlayan tüm koşullar kontrol edilecek ve sadece ilk doğru koşul kodu çalışacaktır. Kalan koşullar kontrol edilmeyecek ve kodları çalışmayacaktır.
Projeyi bitirdikten sonra, projeye ekstra birkaç yol ekleyerek yeni öğeler ekleyebilirsiniz.
- Oyuncuların yarışı bitirdiğinde başlangıç çizgisini dokunarak tekrarlayabilmesi için kod ekleyin.
- Bir yarış sırasında zamanı göstermeyi tasarla. Ayrıca, bir Zaman Köprüsü Oluşturma Eğitimi gibi bir parçada zamanı gösterebilirsin.
Completed script
local timePassed = 0
local finishLine = script.Parent
-- Yarış bittiğinde bitiş ve zamanlayıcıyı tekrar çağırmayı önlemek için kullanılır
local raceActive = true
-- Oyuncu bitiş çizgisine dokunduğunda çalışır ve onlara bir ödül gösterir
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 yarış aktifken bir oyuncunun bir parçaya dokunup dokunmadığını 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 takip eder. Yazılımın altında olması gerekir.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end