Arayüz;

1: sprites yani çizimler. oyununuzun içindeki tüm çizim içeren şeyler'in bir sprite'ı olması gerekir. sprite'lar da bu klasörde yer alır. klasör'e sağ tıklayarak sprite oluşturabilirsiniz.
2: sounds yani sesler. oyununuzun içindeki tüm sesler bu klasörde yer alır.
3: backgrounds yani arka plan. room yani oyununuzun geçicegi dünyaya bir arka plan vermek içindir. mesela oyun top-down bir oyun ise arka plana çimen koyabilirsiniz. detaylı bir şekilde anlatacagım.
4: paths yani yol. path'ler bir objeye hareket vermek için kullanılır. sağ tıklayıp path yaratabilirsiniz.
5: Scripts yazması uzun süren bir kodu tek bir kelimeye atayıp daha sonra onu kullanabilirsiniz mesela. script'ler çok işlevlidir fakat bu konu sonraki konu.
6: Fonts. oyun içi herhangi bir yazı yazdıgınızda Game Maker default font'u kullanır. eğer boyutunu ya da şeklini değiştirmek isterseniz buradan kendi istediginiz font'u yaratıp daha sonradan o font'u kodunuzda çağırabilirsiniz. daha sonra değineceğim.
7: Objects yani objeler. bir obje yarattıgınızda onu oyununuza eklemek için room yani odaya eklemelisiniz. ayrıca her objenin sprite yani çizimi olmak zorunda degil.
8: Room yani oda. bir oyn yapmak istiyorsanız en az 1 odaya ihtiyacınız var :d oyununuz o oda içerisinde yapılır.
9: tamamen işlevsiz bir şey işte.
10: Game settings yani oyununuzun ayarları, game maker'ın degil. buradan oyununuzun FPS'ini, tam ekran yapılıp yapılamayacagını, oyun penceresini değiştirip değiştiremiyecegimizi, oyunumuzun ismini vs. şeyleri ayarlarsınız.
11: Yeni bir oyun yaratmak için. basarsanız üstünde çalıştıgınız oyun kapanır yeni oyun yeri açılır. SAVE almayı unutmayın!
12: Save yani kayıt. oyununuzu kaydeder. her 3 dakikada bir kaydetmenizi öneririm. alışkanlık olsun sizde. ayrıca kısa yolu CTRL+S dir.
13: Run the game, bastığınızda oyununuzu kaydedip çalıştırır. bu sayede oyununuzu test edip oynayabilirsiniz.
14: Debug mod yani hata ayıklama/test modu. bu modda değişkenlerinizi anlık olarak gözlemleyebilirsiniz. son derece işlevli ve çok ihtiyacınız olan birşey. değinicem.
15: Sprite yaratmak için kısa yol.
16: Obje yaratmak için kısa yol.
şimdi de obje arayüzüne bakalım.
1: Objenizin ismi. (KESİNLİKLE TÜRKÇE KARAKTER KULLANMAYIN. AKSİ TAKDİRDE KOD İÇERİSİNDE OBJEYİ ÇAĞIRAMAZSANIZ/HATA ALIRSINIZ.)
2: Objenizin Sprite'ı yani resmi. obje sadece değer tutmak için falan ise bi sprite atamanıza gerek yok.
3: Visible. Yani görünürlük. bunu kapatırsanız oyununuzu başlattıgınızda objeniz görünmez olur. (oda'da değil oyun içinde.)
4: Solid eğer bunu açmazsanız objeler arası çarpışmada sıkıntı yaşarsınız. mesela platformer bir oyun yapıyorsanız oyuncu ayağının altındaki yere basabilmesi için bunu açmalısınız. veya bir mermi birine deydiğinde algılamasını istiyorsanız yine bunu açmalısınız.
5: Presistent eğer bunu açarsanız objeniz odalar arasında geçiş yaparken sıfırlanmaz. bu Presistent Room'larınızda da var. başka bir room'a geçiş yaptıgınızda objenizin sıfırlanmaması içindir.
6: Objenize fizik vermek için. genellikle kimse bunu kullanmaz çünkü kendi fiziginizi basit yoldan keniniz yazarsınız. eğer bu seçenegi kullanırsanız bazı yerlerde hata alabilirsiniz. GM'nin size hazır olarak sundugu SAVE sisteminde mesela.
7: Depth yan iderinlik. 0'dan düşükse objeniz diğer objelerin üstünde kalır, 0'dan yüksekse objeniz diğer objelerin altında kalır. mesela top-down bir oyunda karakteriniz çimende yürürken, karakterinizin depth'i çimen'in depthinden düşük ise çimen karakterinizin üstünde gözükür. bu da saçma olur. çimen'in depth'i 0 ise karakterinizin depth'ini -1 yapmanız gerekir.
8: Parent ben hiç kullanmam genellikle kodlarla halelderim o yüzden bu düğmenin size ne kolaylıklar kazandırdıgını bilmiyorum :S
9: Mask yani collision mask işte. Siz objenize bir sprite verdiginizde o sprite'ın bir mask'i olur. bu mask çarpışma noktası gibi birşeydir işte. atıyorum siz objenizin sprite'ının X olmasını istiyorsunuz fakat mask'inin X sprite'ından farklı olmasını istiyorsunuz atıyorum Y olsun. o zaman burdan mask'a tıklayıp Y sprite'ını seçerseniz objenizin sprite'ından farklı bir mask'ı olur. karışık gelebilir evet ama anlatması karışık anlaması çok basit. ayrıca buna zaten ilk aşamalarda hiç bulaşmıycaksınız o yüzden takmayın kafanıza.
event'ler.
Create: Create eventinde değişken belirleyebilirsiniz mesela karakterinizin canı kaç olsun gibi. örnek: playerhp=100. ayrıca Create eventinde yazdıgınız kodlar sürekli çalışmaz, oda başladıgında (oyun başladıgında) bir kere işler.
Destroy: Hiç kullanmadıgım için bilmiyorum ihtiyacınız da yok zaten. ama tahminimce obje yok olurken bir kod çalıştırması için bir event.
Alarm: bildiğiniz alarm işte. burda alarm oluşturaiblirsiniz.mesela alarm[0] oluşturdunuz ve bu eventin içine bir kod açıp, içine playerhp=0 yazdınız. bu demektir ki alarm[0] çalıştıgında playerhp değeri 0 olucak. alarm'ı kurmayı daha sonra değineceğim.
Step: burda yazdığınız kodlar sürekli çalışır. (saniyede 30 kere ama bunu bilmeniz şu an önemsiz.) yani örnek W tuşuna basılı tutuyorsak karakter sürekli ileri dogru yürüsün'ü step eventine yazarız. Eğer create eventine yazarsanız W tuşuna basılı tuttugunuzda karakter sadece 1 pixel ilerler. step o kodu sürekli çalıştırdıgı için, sürekli çalışması gereken kodları step eventine yazarız.
Collision: çarpışma eventimiz. örnek olarak karakterimiz duvarla temasa geçtiginde karakterimizin hızı 0 olsun yani dursun'u buraya yazabiliriz. tabi step eventine de yazabiliriz pek bir şey farketmiyor. (Burdaki veya herhangi bir yerdeki Collision yani çarpışma kodunuzun çalışması için çarpışma özelliğine sahip tüm objelerinizin SOLİD özelliği açık olmalıdır.)
Keyboard: listenin az aşşağılarında da gördüğünüz gibi keyboard eventleri 3'e ayrılır. Keyboard, Press ve Release.Keyboard basitçe şudur, keyboard eventi klavyenizdeki bir tuşa basılı tuttugunuzda işe yarar. yani karakterin bir tuşa basılı tuttugunuzda SÜREKLİ olarak yürümesini istiyorsanız o kodu buraya yazmanız gerkir. ki genellikle burayı kullanmazsınız zaten STEP eventi çok daha işlevli.
Key press: Klavyede bir tuşa basılı tutsanız dahi sadece bir kere çalışan eventtir.
Key Release: Klavyeden bir tuştan elinizi çektiginiz an çalışan eventtir.
Mouse: bu event tıpkı Keyboard gibi 3'e ayrılır, button, button press ve button release. işlevleri ve mantıgı aynı keyboard dakiler gibidir. biri basılı tutmak için, diğeri sadece 1 kere basabilmeniz için, bir diğeri de o tuştan parmagınızı çekerken işe yarar.
Other: Burda birsürü event vardır kısaca en önemlilerinden bahsedeyim; Outside room yani odanın dışına çıktıgı zaman. buraya yazıcagınız kodlar, objeniz odanızın(room'unuzun) dışına çıktıgında gerçekleşir. Animation End yani eanimasyon sonu. sprite'ınız animasyon ise bu evente yazıcagınız kodlar, animasyonun son karesinde çalışacak olan kodlardır.
Draw: çizim eventi. oyununza HUD eklemek istiyorsanız mesela sağ üstte can barı sol üstte para veya aklınıza gelebilecek her türlü çizim resim sayı ve bar, buradan yapmak zorundasınız. daha sonra detaylıca değineceğim.
Astnchronous: Networking kısmı. bilmediğim için değinemeyeceğim.
Değişken oluşturma ve değişkene erişme.
Değişkenler (variables) dediğimiz şey bilgi tutan şeylerdir. ismini değişken olduguna bakmayın, isterseniz değişmeyen sabit değişken de yaratabilirsiniz. Değişkenlerimizi Her zaman Create eventin'de yaratırız. 2 tür değişken yaratma yöntemi vardır.
1: global. ile yarattığınız değişkenler. (global.xxxx = 100)
2: globalsiz sadece ismiyle yarattıgınız değişkenler. (xxxx = 100)
bu ikisinin farkı nedir ondan başlayalım.
eğer değişkenin başına global koyarsanız herhangi bir yerde o değişkene erişip kullanabilir, değiştirebilirsiniz.
eğer sadece isim ile bir değişken yaratırsanız çoğu zaman sadece yarattığınız objeden o değişkene ulaşabilirsiniz. tabi ki diğer objelerden de ulaşabilirsiniz fakat diğer objelerden ulaşmak istiyorsanız global yapmanızı tavsiye ederim çünkü biraz sıkıntılı az sonra bir örnek ile değineceğim.
mesela karakterinizin canı ve parasını yapmak istiyorsunuz. vars adında bir obje yarattım ve o objeyi odamın herhangi bir yerine koydum. bu obje benim değişkenlerimi tutucak. Create eventi yarattım ve içine;
global.playerhp=100
global.money=0
yazdım. öncelikle isim seçimine gelelim KESİNLİKLE hiçbir kod'da veya obje/sprite isminde Türkçe karakter kullanmayın. money'i neden sadece money olarak, karakterimizin canını ise neden sadece hp olarak degil de player hp olarak yazdım? çünkü oyunumzda canı olan tek şey karakterimiz olmayabilir. mesela düşmanların da canı olur. veya bir obje kırılabilir objeyse mesela ağaç kesiyorsak o ağac'ın da canı olur. gerçi onların başına global yazmayız herneyse. ama oyunda başka hiç bir şeyin parası olmaz. sadece karakterimizin olur. o yüzden playermoney yazmama gerek yok.
peki geldik can alıcı kısma. atıyorum siz düşman yaratmak istiyorsunuz fakat bu düşman'dan birden fazla olucak. 1 tane olmayacak yani. o zaman düşman objemize gelip, bir create eventi açıp ona bazı değişkenler atamamız lazım. düşmana can değişkeni atarken global kullanamazsınız. (tabi düşmanımız 1 tane değilse :p) Çünkü eğer global kullanırsanız ve bir den fazla düşman varsa, siz bir düşmana hasar verdiginizde tüm düşmanlar hasar alır. bu da saçma olur tabii. diyelim düşmanımız zombi olucak. düşmanımızın create eventine;
zombiehp=100;
dedik. o sonundaki ; işareti Game Maker'da nokta demektir. kod bitti demek yani. kullanmasanız da olur. artık bir düşmana hasar verdiginizde diger düşmanlar da hasar almaz. tabi bu hala kodlamanıza baglı. fakat global yazmadıgımız için diğer objelerden bu değişkene erişmek biraz zor olucak. ki erişmenize de gerek yok zaten ama yine de bi örnek vericem.
düşmanımıza silah ile ateş ettik. mermimiz düşmana değdi. şimdi ne olucak? düşman objemize Collision eventi(mermi ile çarpışma) açıp şunu yazıcaz;
id.zombiehp-=10
yani dedik ki, id yani merminin hangi enemy objesine değdi ise,(daha sonra değinicem) zombiehp-=10 yani zombimizin canını 10 azalt. şimdi eğer id. koymasaydık başına yine tüm zombilerin canı azalıcaktı. id demek şu demek, şimdi 1 tane zombi objesini haritada 100 kere kullandınız diyelim. GM bunları nasıl ayırıcak? hepsi aynı obje? id ile. yani biz burda dedik ki, eğer mermi diğer zombilere değil de bu zombiye çarptıysa bu zombinin canı azalsın.
eğer atıyorum bu mermi deyince canının gitme olayını düşman objesinin içerisinde degil de merminin içerisine yazamazmıyız? hayır bunun bir çok sebebi var.
1.'si mermiyi eğer düşmanımıza değdiğinde yok olucak şekilde yaptıysanız mermi içerisindeki kodları gerçekleştiremeden yok olur çoğu zaman. hatta çoğu zaman hata da verebilir. boyle bi obje yok gibisinden.
2.'si mermiye yazıcaksanız bu kodu global kullanmadıgınız için zombimizin içerisindeki zombiehp deişkenine şöyle erişebilirsiniz;
(objenizin ismi).zombiehp
yani diyelim zombinizin obje ismi obj_zombie o zaman;
obj_zombie.zombiehp;
bu kod ilk önce o objeye gider sonra da o değişkeni arar ve bulur. fakat bu şekilde kod yazarsanız mesela obj_zombie.zombiehp-=10 yaparsanız yine haritadaki tüm zombilerin canı gider.
Kısacası eğer değişkeniniz global kullanmıyorsa o değişkeni sadece değişkeni tutan obje içerisinde kullanabilirsiniz. yerine göre mantıklı. örnek;
düşmanınızın canı, ağaç,taş canı vs.
global ise genellikle kopyası olmayan objeler için kullanılabilir veya diğer her şey için tabii :d
örnek: karakterinizin canı, parası, yürüme hızı, elinde hangi silah oldugu, üstünde kaç eşya oldugu, oyunda market varsa marketin içindeki eşyaların kaç para oldugu, VS.
X,Y koordinatları.
X = sağ ve sol
Y = yukarı ve aşşağı.
x0,y0 başlangıç noktasıdır. yani SOL EN ÜST. X arttıkça, sağa doğru gider. Y arttıkça, aşşağı doğru gider. bu kadar basit.
 |