Perşembe, Eylül 18, 2008

AGS Eğitselleri 2: Script yazımına basit bir giriş

Kullanıcıları kod yazmaya teşvik etmek için olsa gerek, eski versiyonlarda bulunan, sınırlı seçeneklere sahip olan Komut Seçme ekranı yeni versiyonda kaldırılmış. Mesela eskiden bir kapının üzerine göz ikonu ile tıklandığında bir yazının çıkmasını basit bir Komut Seçme ekranından ayarlayabiliyorduk ama artık bunu yapmak için önceki eğitselde anlattığım işlemi uygulamamız gerekiyor. Bu yüzden kod yazımını anlatmaya şimdiden bir başlangıç yapmak istedim.

AGS, C tabanlı bir script sistemi kullanıyor. Eğer C/C++’da tecrübeliyseniz AGS Scripting’e alışmanız zor olmayacaktır.

AGS Scripting’in C’den en önemli farkları, AGS’de sadece birer fonksiyonların içini komutlarla dolduruyor olmamız (yani #include’ları filan yazmamıza gerek yok) ve AGS’nin kendine özel çok sayıda fonksiyona sahip olması (her AGS’ye özel komut (mesela NewRoom) aslında bizim tanımlamamıza/yazmamıza gerek kalmamış birer C fonksiyonudur).

Bu örnekte yapılan şey, hHotspot1_look() fonksiyonunun içine, bu fonksiyon çağırıldığı zaman (yani kapıyı temsil eden hotspot’ı incelediğimizde) çalıştırılacak komutları yazmak.

C’de bir fonksiyonun içine yazılanlar, { ile } arasındadır (Eğer ilk {‘den sonra başka {‘ler de kullanırsanız o zaman fonksiyon, kullanılan {‘le aynı sayıdaki } ile biter).

AGS’deki her bir komutu teker teker anlatmak yerine, istediğiniz bir komuta nasıl ulaşabileceğinizi anlatayım:

Oyuncunun bir inventory item’a sahip olmasını istiyor ama bunu gerçekleştiren komutun ne olduğunu bilmiyorsunuz mesela. Help/Dynamic Help ile Dizin’de (veya İçindekiler’de Scripting’in altında istediğiniz script’in konusuyla ilgili olabilecek klasörde) sıralı kodlara göz atmanız, uğraştırıcı ama etkili bir yol (Inventory items klasöründe değil de character functions’ta listelenmiş, çünkü bir karakterin bir nesneye sahip olması, karakterle ilgili bir komuttur).

Buradan AddInventory komutunun açıklamasını inceliyoruz.
Verilen örnekte
cEgo.AddInventory(iKey); komutu kullanılmış.
 
AGS’nin nesne tabanlı programlamasında c ile başlayanlar karakterlerin, i ile başlayanlar da inventory nesnelerinin
isimlerini temsil etmekte (AGS’nin sağdaki arayüzünden Characters ve Inventory Items’tan ihtiyacımız olan
isimleri öğrenebiliriz).
 
 
Demek ki fonksiyonun içine yazılması gereken kod cEgo.AddInventory(iKey);
 
C’nin kod formatı   Kod(parametre,parametre,parametre, ….); şeklindedir. Bir kodu bitirmek için ; kullanılır,
parametreler de ( ile ) arasına virgülle ayrılarak yazılır. Eğer o kod hiçbir parametre almıyorsa
(mesela RestartGame)
o zaman RestartGame(); şeklinde yazılır.
 
Nesne tabanlı kodlamada ilk önce o nesnenin ismi  (mesela Ego karakterinin script ismi cEgo,
ama oyuncu karakteri tanımlamak için player da kullanılabilir), nokta, sonra kodun kendisi yazılır.
player.AddInventory(iKey);  ile AddInventory(2); aynı işlevi görür.
Nesne tabanlı kodlamada parametreler genellikle isimken öbüründe kullanılacak nesnenin numarasıdır.
  

 
Kodu klavyeyle kendiniz yazarken farkedeceksinizdir, AGS kodu isteğinize göre kendisi tamamlabiliyor.
cEgo’dan sonra noktayı koyduktan sonra çıkanlardan da AddInventory’i bulabilirsiniz.
(yani eğer üzerinde işlem yapılacak doğru elemanı –burada cEgo- bulduktan sonra Help’e bile bakmanıza gerek
kalmıyor).
 
 Bu sefer ChangeRoom’u deneyelim. 
Karşınıza böyle bir şey çıkacak. Burada girmeniz gereken parametrelerin türleri belirtiliyor. 
Başında optional olanları girmenize gerek yok, mesela burada yeni odanın x ve y değerini girmezsek
o zaman eski x ve y değerleri kullanılmakta.
 
Bir komutun hangi parametresinin ne yaptığını görmek için o komutu Help’te incelemenizi tavsiye ederim.
 
int room ile kastedilen şey, Ego karakterinin gideceği yeni odanın numarasıdır (int: tam sayı, integer demektir). 
 
 
 
Sanırım bu kadar bilgi başlangıç için yeterlidir? İleride kod yazımı hakkında daha ayrıntılı bilgiler vereceğim.
 
 
 

0 yorum: