Bir Düşman Eklemek
Ümit ediyorumki sprite ve animasyon ekleme süreçleriyle artık haşir neşirsiniz. Konular hakkında bilgi sahibi olduğunuz için ileriki adımlar tamamıyle tekrarlanmayacaktır. Haydi bir düşman için yeni bir sprite ekleyelim.
1. Çalışma sayfasına yeni bir Sprite objesi ekleyin.
2. Enemies\Snail sprite kuşağını taşıyın ( Import ).
3. Boş animasyon karesini silin.
4. Animasyonu loop ( çevrim ) yapar hale getirip, hızını 15 yapın. ( Çevirenin notu: Loop’u yes yapın, animasyon sürekli tekrar etsin)
5. Salyangoz görüntüsüne dayalı olarak orijini kurun ve bunu tüm animasyona uygulayın.
6. Tüm film karelerini kesin. ( Shift+crop)
7. Animasyon editörünü kapatın ve objenin ismini ‘SnailEnemy’( Salyangozdusman) olarak değiştirin.
8. Gösterildiği gibi yer döşemelerinin üzerine yerleştirin.
Şimdi, aşağıdaki mantığı uygulamak istiyoruz:
-Eğer oyuncu salyangoza yanından çarparsa, parlayacak ve zarar görecek.
-Eğer oyuncu salyangozun tepesinden üstüne zıplarsa, salyangoz ölecek.
Oyuncuyu parlayan yapmak için, oyuncuyu seçin ve Flash davranışını ekleyin. PlayerBox objesini değil gerçek oyuncuyu seçmeye dikkat edin ( çünkü görünen oyuncunun parlamasını istiyoruz). Belli bir an için davranışlardan ‘Flash’ hareketini kullanacağız.
Olay sekmesine görünüme dönün ve yeni bir olay ekleyin:
PlayerBox -> On collision with another object -> SnailEnemy
(PlayerBox -> diğer bir obje ile çarpışırsa -> SnailEnemy ( Salyangozdusman)
Bu olay SnailEnemy her hangi bir açıdan çarpışırsa çalışır. Biz bunu alt-olay yardımı ile oyuncunun üstüne mi zıpladığını yoksa yanlarından mı çarptığını kontrol ederek kullanabiliriz. Haydi oyuncunun yukarda olmasını test edelim.
Kesişme olayını alt olay olarak ekleyelim:
PlayerBox -> Is falling
Oyuncunun düşmanın üstünde olup olmadığını test etmeliyiz. Bu eğer düşerken bir çıkıntıdaysak salyangozun kazara ölmesini engelleyecektir. ‘Is falling’ (düşerken) koşulunasağ tıklayın ve ‘Başak bir koşul ekleyin’i seçin. Olayın çalışabilmesi için tüm koşulların sağlanması gerektiğini unutmayın. Koşulu ekleyin:
PlayerBox -> Compare Y -> Less than, SnailEnemy.Y
( Çevirenin Notu: Player Box’ın Y koordinatını karşılaştırır ve oyuncunun Y’si SalyangozDusmanın Y’sinden düşükse, manasında bir koşul oluşturur)
Y aksı aşağıya gittikçe artar, bu yüzden eğer oyuncunun Y coordinatları salyangozdan düşükse, bu oyuncunun daha yüksekte olduğu manasına gelir
Bu olayda, şu koşulu ekleyin:
SnailEnemy -> Destroy
Başka bir koşul daha ekleyerek oyuncunun zıplamasını sağlayabiliriz:
PlayerBox -> Set vector Y -> -700
‘Set vector Y’ temelde sadece platform hareketinin dikey hızını belirler; buna negatif değer atamak yukarı yönlü hareket oluşturur ( tekrar etmek gerekirse, Y aksi aşağı yönlü artar) ve 700 değeri zıplama gücü olan 1100’den biraz daha azdır. Böylece bu ayar sonucu oyuncunun zıplaması biraz daha zayıf yapılmış olur.
Henüz bitirmedik: ‘Is falling’ olayının kenarlarına sağ tıklayın ( PlayerBox ikonunun sol tarafındaki boşluk) ve Add-> Else’i seçin. ‘Else’ özel bir koşuldur ve eğer önceki olay çalışmazsa işlemeye başlar. Yani bu olay salyangoz çarpıştığı zaman çalışır ancak biz üstüne zıplamadığımız zaman –biz yandan çarptığımızda çalışması gerektiğini söyledik. Bu olayda oyuncunun zarar görmesini istiyoruz. Hareketi ( action) ekleyelim.
Player -> Flash -> ( başlangıç değerlerini bırakın ve tamama ( Done ) tıklayın)
Flash davranışının PlayerBox’da değil Player (oyuncuda) olduğunu unutmayın.
Tamam, böylece oyuncu asla ölmeyecek, fakat sadece yanıp yanıp sönecek. Bu eksiğe rağmen oyuncunun zıplamasını veya yandan yaklaşmasını tespit eden sistemi oluşturmuş olduk. Bu rehber tüm ek özellikleri ve işin inceliklerini kapsamamaktadır ancak ümit ederiz ki ölüm efektlerini nerede oluşturacağınızı (SnailEnemy’nin oyuncu fırlat (Spawn object) faaliyetini kullarak, SnailEnemy yok edildiğinde oluşturulacak bir ‘şaşkına dönme’sprite’i yaratabilirsiniz) ve sağlığın nerede gideceğini (daha ileri aşamalar için oyuncuyu yanıp sönen yapan (flash) olayde sağlığı azaltacak hareketler ekleyebilirsiniz, sağlık için durum değişkenlerini kullanmayı öğrenebileceğiniz top-down shooter tutorial rehberine bakabilir sonra daha fazlasını öğrenebilirsiniz) anlamışsınızdır.
Haydi düşman salyangozu platform üzerinde ileri ve geri hareket eder hale dönüştürelim.
Düşmanı Hareket Ettirmek
Salyangozun hareketi ile ilgili temel problem, onun platformun sonuna ne zaman ulaştığının tesbitidir. Bunun için en basit yöntem, görünmeyen ‘köşe’ işaretçileri eklemektir. Bunlar görünmeyen spritelerdir ve salyangoz bunlara çarptığı zaman yönünü değiştirir.
Salyangoz için tekrar Platform davranışını da kullanabiliriz. Bu uygun olur çünkü:
-böylece sol ve sağa hareket edebilir.
-oyuncunun yapabildiği gibi yukarı ve aşağı zıplayabilir.
-isterseniz çıkıntılardan düşebilir
- eğer düşmanın zıplamasını istiyorsanız, ‘simulate control’ faaliyetini kullarak düşmanın totmatik olarak zıplamasını sağlayabilirsiniz.
SnailEnemy sprite’ne Platform davranışını ekleyin. Bu obje için karmaşık animasyonlar kullanmayacağımızdan, görünmez ‘kutu’ objesi kullanmadan platform davranışını doğrudan kullanabiliriz. Eğer platform oyununuzda karmaşık animasyonları olan düşmanlar varsa, oyuncu için kullandığımız kutu tekniğini kullanmanız gerekir.
Oyuncunun SnailEnemy’i kontrol etmesini istemiyoruz – biz otomatik olarak hareket etmesini istiyoruz. Biz bunu Default controls özelliğini No yaparak, sonra Simulate control hareketini kullanarak oluştururuz. Salyangozlar oldukça yavaş oldukları için, Max speed’i 50 yapın ve bunların hızlanmasını Acceleration ve yavaşlamasını Deceleration 100 olarak ayarlayın!
‘Köşe2 işaretçilerine de ihtiyacımız var. Yeni bir sprite objesi ekleyin ve sadece opak dikdörtgen yükleyin. İsmini EdgeMarker ( Köşeişaretçisi) olarak belirleyin. Büyüklüğünü 40X40 olarak ayarlayın ve Initial visibility ( Başlangıç görünümü) Invisible ( Görünmez) olarak ayarlayın çünkü bunu oyunda görmek istemiyoruz. Her birini salyangozların platformuna göründüğü gibi ekleyin: ( her obje için control+sürükle ile birlikte yeni görünümler, kopyalar, oluşturabileceğinizi unutmayın)
Salyangozun ayrıcı hangi yöne gittiğini bilmesi gerekir – sol mu sağ mı. Bunu instance variables (görünüm değişkenleri) yardımıyla yapabiliriz. Bunlar basitçe objenin her bir görünümünde saklanan sayılar veya yazı değerleridir. Eğer çoklu salyangozlarımız varsa, her biri görünüm değişkenlerini ayrı ayrı hafızalarında tutar. Bu onların kendi sağlıklarının, cari yönlerinin ve diğerlerinin değelerini tutmasını sağlar. Örnek vermek gerekirse, bu değişkenler “kaçmak”, “oyuncu takibi veya “boş hal” olabilir. Bu durumda bizim sadece “sol” ve “sağ” değişkenlerine ihtiyacımız var ancak aynı yolla diğerlerini oluşturmak yararlı olabilir.
SnailEnemy objesini seçin. Özellikler çubuğunda, ‘Görünüm değeleri’ (Instance Variables) altındaki Add / Edit’e tıklayın.
Obje için belirlenmiş tüm görünüm değeleri bir dialog penceresinde görünür. Yeni bir tane eklemek için ‘add’ ikonuna tıklayın. İsmini Action ( Hareket) koyun, türünü text ( yazı) olarak belirleyin ve ilk değeri right ( sağ) olarak yazın ( sağa gitmek için kullanacağız).
OK’a tıklayın ve görünüm değerleri penceresini kapatın. Olay sekmesine (Event Sheet) geri dönün.
Aşağıdaki mantığı yerleştirmeyi istiyoruz:
-eğer action “right” ise, platform davranışını ‘sağa’ basılıyormuş gibi yap ve salyangoz sağa gitsin.
-eğer action “left” ise, platform davranışını ‘sola’ basılıyormuş gibi yap ve salyangoz sola gitsin.
Ek olarak:
-eğer salyangoz EdgeMarker ( Köşe İşaretçisine) çarparsa, action’ı değiştir ( eğer “left” ise, “right” yap; “right”sa “left” yap).
Aşağıdaki iki olayla hareketi oluşturabiliriz:
Olay (Event): SnailEnemy -> Compare instance variable -> action equal to "right" (buradakilerin yazı olduğunu belirtmek için çift tırnak işaretini kullanın)
Hareket (Action): SnailEnemy -> Simulate control -> Right
Aynısını sol hareket içinde yapmak gerekmektedir. Oyuncu ( Player) için yaptığımız gibi sol ve sağa ayna yansıması (mirror) görüntüsünü oluşturmayı istiyoruz. Bunun için “left” ( sol) olayda SnailEnemy -> Set mirrored’ı ekleyin ve sağ olayda da SnailEnemy -> Set not mirrored’ı ekleyin. Bunları aşağıdaki gibi tamamlamış olmalısınız:
Şimdi salyangozun yönünü köşelerde değiştirelim:
Event: SnailEnemy -> On collision with another object -> EdgeMarker
Subevent: SnailEnemy -> Compare instance variable -> action equal to "right"
Action: SnailEnemy -> Set value -> action to "left"
Subevent: Else
Action: SnailEnemy -> Set value -> action to "right"
Burada Else’i kullanmak önemlidir, zira olaylar yukarıdan aşağıya çalışmaktadır. Eğer else yerine ‘action equal to “left” dersek, önceki olayın bunu bu şekilde sabitleyeceğini fark edin. Böylece sadece tekrar sağa dönecektir, ve hiçbir etkisi olmacaktır. ‘Else’ i kullanarak, ilk koşul doğru ise ikinci olayın çalışmasını engellemiş oluyoruz.
Projeyi çalıştırın. Salyangozun platformu üstünde ileri geri hareket ettiğini göreceksiniz. Böylece üzerinden zıplayıp geçmek biraz zor olacaktır! Bu çok ilkel bir “AI”( yapay zeka ) sistemidir, ancak ümit ediyoruz ki siz olay sistemlerini hareketleri kontrol ederek daha zeki düşmanlar oluşturabilirsiniz, hatta aşağıya düşmelerini sağlayabilir veya platformda zıplamalarını sağlayan başka işaretçiler kullanarak düşmanlarınızın zeki görünmelerini sağlayabilirsiniz.
Üzerinde iki salyangoz olan bir platform oluşturmayı deneyin. Her birisinin bireysel olarak hareket ettiklerine dikkat edin, çünkü bunların her biri bireysel olarak kendi durumlarının tutulduğu görünüm değişkenlerini action muhafaza etmekteler. görünümlerin bağımsız olarak tutulan değişkenleri olmasının ne kadar önemli olduğunu görmeye başladığınızı umuyorum- her biri tam olarak diğerinin yaptığı aynı şeyi yapmamaktalar!