Oyun yapımcısı stüdyosu eğitimi. GameMaker - Çeşitli dersler

Game maker studio, 2D oyunlar oluşturmak için iyi bir platformlar arası tasarım motorudur. Motorun çok basit ve anlaşılır bir arayüzü var, ancak ustalaşmakta zorluk çekiyorsanız size yardımcı olacaktır. çok sayıda Rusça belgeler, bu motorda çalışma ve oyun oluşturmaya ilişkin video dersleri ve forumlar.

Game maker Studio editörü, yalnızca 2D oyunlar oluşturmayı değil aynı zamanda 3D grafikleri kullanmayı da mümkün kılar. 3D oyunlar oluşturma yeteneğinin sizi harika modern grafiklerle veya yüksek derecede optimizasyonla memnun etmeyeceğini belirtmekte fayda var, bu nedenle bu motor yine de yüksek kaliteli 2D oyunlar oluşturmak için bir platform olarak kullanılmalıdır.

Motor, kendi spritelarınızı (grafik nesneleri) kullanarak 2D oyunlar oluşturmanıza olanak tanır. bilgisayar grafikleri), Game maker stüdyosunda da oluşturulabilen ve düzenlenebilen sesler ve animasyonlar.

Game maker stüdyo düzenleyicisinin ayrılmaz bir avantajı çapraz platformdur; bu, PC (Windows, Mac OS, Ubuntu), mobil (Android, Amazon Fire, iOS, Windows 10 Mobile) için farklı platformlar için kendi oyunlarınızı oluşturma yeteneğidir. , Web (HTML5) ve Oyun konsolları (Xbox One, PlayStation4).

Yerleşik sprite, ses, harita, animasyon vb. deposunu fark etmeden duramazsınız. Bu, karakterin görünümü veya animasyonu gibi bireysel parçalar oluşturarak dikkatinizi dağıtmadan hızlı ve kolay bir şekilde oyunlar oluşturmayı mümkün kılar.

Yeni başlayanlar için

Oyun yapımcısı stüdyosu hırslı insanlar için uygundur ilginç fikirler Bir oyun prototipi oluşturmak için. Şimdi, bir oyun yaratmaya yönelik iyi bir fikirle ilgili en büyük sorun, bunun uygulanmasıdır, çünkü bu, programlama dilleri bilgisi gerektirir. Bu motor, programlamaya veya senaryo yazmaya gerek kalmadan oyun oluşturmayı mümkün kılar.

Planlanan bir oyunun mekaniğinin ilk test oluşturulması için çok uygundur, çünkü başlangıçtaki en önemli şey, oyunun kendisinin ilginç olup olmayacağını anlamaktır ve ancak testten sonra ayrıntılı oluşturma ve iyileştirmeye başlamak mümkün olacaktır. Oyunun grafik kısmının. Game maker stüdyosu bu tür amaçlar için uygundur; bu tür görevleri hızlı ve kolay bir şekilde gerçekleştirmeyi mümkün kılar.

Sürükle ve Bırak (DnD™), yeni başlayanlar veya görsel veya sanatsal açıdan daha odaklı olanlar için ideal olan bir grafik geliştirme ortamıdır. DnD ile komut dosyası yazmadan, yalnızca program arayüzünü kullanarak oyunlar oluşturmak mümkündür.

Ayrıca Game maker stüdyosuyla çalışmaya yeni başlayanlar için bu motorun forumlarında bulunabilecek Ruslaştırılmış arayüz yardımcı olacaktır. Resmi olanda ayrıca motorla çalışmaya ilişkin çok sayıda belge ve talimat bulunmaktadır.

Profesyoneller için

Ancak Game maker stüdyo motorunun profesyonel Oyun geliştiricilerinin ilgisini çekmeyeceğini söylemeye gerek yok. Game maker stüdyosunun Delphi ile yazılmış, Java Script ve Pascal sözdizimine sahip kendi programlama dili GML vardır. GML kullanarak bir oyun oluştururken programlama dili birçok kapıyı açar. daha fazla olasılık aracılığıyla yerine grafik editörü programlar.

Arayüze genel bakış

Game maker studio No. 1'in son sürümü 8.1.140 idi, bugün artık desteklenmediğinden yayınlandı yeni bir versiyon Oyun yapımcısı stüdyosu 2.

Game maker studio 2, motorun resmi web sitesinde ücretsiz olarak mevcuttur. Ücretsiz sürümü https://www.yoyogames.com/get linkinden indirilebilir, ücretsiz kullanım için tasarlanmıştır ve sınırlı sayıda araç içerir ancak bu durum ilk projenizi oluşturmanıza engel olmayacaktır. İndirmek için ücretsiz sürüm siteye kayıt olmanız gerekmektedir.

Ayrıca resmi forum Motorun crack'ini indirebilirsiniz.

Game maker studio'yu indirip yükledikten sonra başlatın ve indirirken resmi web sitesinde kaydettiğiniz verileri pencereye girin. Verileri girdikten sonra motor arayüzü açılır.

Programın ücretsiz sürümünü kullandığımız için “Eğitim” kategorisi kullanımımıza sunulmayacaktır.

Oyunu geliştirmeye başlamak için, "Oluştur" düğmesine tıklayın ve bir sonraki pencerede "Sürükle ve Bırak" düğmesine tıklayın, ardından proje için bir ad bulmanız ve onu bir klasöre kaydetmeniz gereken bir pencere açılacaktır. sizin için uygun bir yer.

Çalışma alanı açıldıktan sonra pencerenin sağ tarafında oyundaki bölümlerimizin sıralanacağı sekmeleri görebilirsiniz.

Çalışmaya ve nesneler oluşturmaya başlamak için boş alana sağ tıklayıp "Kaynaklar" seçeneğini seçmemiz gerekecek. Açılan pencerede neyi geliştirmeye başlayacağımızı seçin.

Bir sprite oluştururken, oyunumuzun hareketli karakterleri olan oluşturma menüsü bize açılacaktır. Burada bir karakteri tamamen sıfırdan piksel piksel çizebilir veya hazır bir karakteri içe aktarabilirsiniz. Ayrıca onu canlandırın, karakterin eylemlerinin kare kare animasyonunu oluşturun.

Bir harita oluşturmak için "Kaynaklar"ı ve ardından açılır pencerede "Oda oluştur"u seçmemiz gerekiyor. Oda düzenleyici, boyutu, arka planı ayarlama, etkileşim öğelerini ayarlama, karakterleri yerleştirme, yolları çizme vb. olanağı sağlar. Oda düzenleyicisinde ayrıca hazır bir arka planı içe aktarabilir veya bu düzenleyiciyi kullanarak kendiniz bir arka plan oluşturabilirsiniz.

Etkinlik oluşturma, programlamaya veya komut dosyası yazmaya başvurmadan yapılabilir; her şey oldukça sezgisel menüler ve pencereler kullanılarak yapılır. Game maker studio görsel düzenleyicisini kullanarak bir nesne için ayrıntılı olarak düşünebilir ve oldukça karmaşık eylem senaryoları oluşturabilirsiniz.

Parametreleri kullanarak oyunun oluşturulacağı platformu seçebilir ve oyun penceresinin boyutu, sürümler, kısayollar, başlangıç ​​ekranları vb. gibi oyunda ince ayar yapabilirsiniz.

Programın GML'de kodla çalışma fırsatı verdiğimiz kısmını belirtmekte fayda var. Basit komut işlevlerinin kolaylıkla gerçekleştirilmesinden çok memnunum. Bu nedenle, eğer yeni başlayan bir Oyun yaratıcısıysanız ve zamanınızın çoğunu buna ayırmaya hazırsanız, o zaman GML dilini öğrenmeye başlamanız yeterlidir.

Bir kraker yükleme

Yeni başlayanlar için gezinmeyi kolaylaştırmak için Rusça bir arayüz kurmak daha iyi olacaktır. Bunu yapmak için, bağlantısı yukarıda bulunan crack dosyasını indirmeniz gerekir.

Rusça dil dosyasını indirdikten sonra kopyalayın ve C:\Program Files\GameMaker Studio 2\Languages ​​yolunda bulunan “Languages” klasöründeki Platformun bulunduğu dizine yapıştırın.
Eklenen dosyayı Not Defteri'nde açın, bunu yapmak için sağ tıklayın ve "Düzenle" yi seçin.

Not Defteri bu dosyanın yapılandırmasıyla açılacaktır. 7. satıra aşağıdaki konfigürasyonu eklememiz gerekiyor.

LanguageCode,ru,ru,bu paketin temsil ettiği standart Windows işletim sistemi dil kodu (yalnızca birincil kod olabilir, yani. en veya birincil-ikincil yani. ru-RU)

Dosyayı kaydedin ve standart “ingilizce” dosyasının yedeğini alın; bunu yapmak için dosyayı başka bir klasöre kopyalamanız yeterlidir. Bu, bir şeyler ters giderse onu geri kopyalayıp orijinal motor diline geri döndürebilmeniz için gereklidir. Rusça dosyayı kaydettikten sonra, eski İngilizce dosyayı silin (daha önce başka bir klasöre kaydedilmiştir) ve Game maker studio'yu başlatın.

Game maker stüdyo incelemesinin sonuçları

Artıları:

Eksileri:

  • Bazı platformlar için kötü optimize edilmiş.
  • 3D oyunlar oluşturma aracı yeterince uygulanmadı.
  • Yerleşik bir Rusça dil arayüzü yoktur.
  • Ücretsiz sürümü kullanırken büyük kısıtlamalar vardır (bu yüzden ücretsizdir).

Çözüm

Game Maker Studio, kolay öğrenilebilen ve ayrıntılı belgelere sahip, platformlar arası bir oyun motorudur. Program, kendi oyunlarınızı çok hızlı bir şekilde oluşturmaya başlamanıza olanak tanıyan sezgisel ve kullanımı kolay bir Sürükle ve Bırak (şimdi "DnD" olarak adlandırılıyor) "eylem simgeleri" arayüzü sunuyor. Oyununuzda kullanmak üzere görüntüleri ve sesleri içe aktarıp oluşturabilir ve ardından tek bir düğmeye dokunarak eylemlerinizin sonuçlarını anında görebilirsiniz. GameMaker: Studio'nun 2D oyunlar için tasarlandığını belirtmekte fayda var (ancak 3D ile çalışmak için de temel destek var). D&D'nin yardımıyla programlama bilgisi olmayan herkes Mario veya Tetris gibi basit bir oyun yaratabilir.

Oyunları seviyorsanız şüphesiz onların nasıl yapıldığını merak etmişsinizdir. Oyun yapma arzunuz varsa (veya olacaksa) ancak deneyiminiz yoksa, bu yazıda başlamanın en iyi yolundan bahsedeceğim.

giriiş

Game Maker inanılmaz derecede basittir oyun motoru Windows, Mac OS X, Ubuntu, Android, iOS, Tizen, Windows Phone, Windows 8, PlayStation 3, PS 4, PS Vita, Xbox One ve HTML 5 gibi çok sayıda platform için oyunlar oluşturmanıza olanak tanır. SteamWorks desteğidir. Eğer oyununuz başarılıysa başka bir platforma geçmek zor bir iş olmayacaktır.

Mütevazı bilgi ve minimum motivasyonla bile geliştirme hızı, diğer motorlardan öznel olarak daha hızlıdır. Yeni başlayanlar için kurulum ve konfigürasyon mümkün olduğu kadar basittir ve özel bilgi gerektirmez. Diğer platformlar için derleme, oyun kodunun değiştirilmesini gerektirmez ve tek tıklamayla (neredeyse neredeyse) yapılır.

Game Maker'ın arkasındaki şirket olan YoYoGames, yakın zamanda Playtech tarafından satın alındı ​​ve Game Maker'ın büyümeye devam etmesini sağladı. Duyurulan Game Maker 2.0 muhtemelen daha da kullanıcı dostu ve basit olacak ve daha da büyük yeteneklere sahip olacağını varsaymak mantıklı. Basın bülteninde yazdıklarına göre GM 2.0, şirketin satın alınmasının nedenlerinden biri.

Bu yazımda kısaca Game Maker'dan bahsedeceğim ve gelecekteki projenin basit bir taslağını yapacağız.

Bu motor kimin için ve hala hangi amaçla kullanılabilir?
Hepsi için. Hedef herhangi bir 2D oyundur. Bununla birlikte, programlamanın yerel bir unsur olmadığı kişiler için olduğu kadar, hızlı prototip oluşturmak ve oyun yapmak ve/veya oyunlardan para kazanmak isteyen herkes için minimum çabayla oyun oluşturmak için Game Maker idealdir.

Game Maker'ın Artıları

- basit giriş;
- Java/C/C#...'dan herkesin aşina olduğu sözdizimi;
- farklı platformlarda kolayca derleme yeteneği;
- yıllar boyunca pek çok sorunu çözmüş ve kodu sizin için yazan aktif bir topluluk;
- büyük miktarda kodu kendiniz yazmanıza gerek kalmadığı için standart işlevsellik;
- uzantılar aracılığıyla genişletilebilirlik;
- Yardım (F1), mükemmel açıklamalar ve örneklerle çok basit ve kullanışlıdır.

Game Maker'ın Eksileri

- ücretli (oyunu yayınlamak için büyüdüğünüzde bir lisans satın almanız gerekecek);
- kullanıcı değişkenlerinin otomatik olarak değiştirilmesi yok; yalnızca standart ve komut dosyası değişkenleri için;
- maksimum lisansın yüksek maliyeti (ancak herkesin tüm modüllere ihtiyacı yoktur);
- teknik destek (teknik destekle iki kez iletişime geçtim, 2 haftadan kısa süre içinde bana yanıt vermediler);
- otomatik referanslama imkanı yoktur.

Şimdi oyunu oluşturmaya geçiyoruz. Game Maker'ı kurup boş bir proje oluşturmak bence sorun değil. Genel olarak, yeni başlayanlar için tüm işlevleri düşünmek, diyagramlar çizmek, para kazanmayı düşünmek vb. iyi olur, ancak makalenin amacı bu değil, bu yüzden size bir proje oluşturmanın bir yolunu göstereceğim. acemi oyun geliştiricisi.

Projenin yapısına kısaca göz atalım:

  • Spritelar - spriteların (resimler, animasyonlar) bulunduğu klasör;
  • Nesneler - kendi hazırlanmış etkinliklerine sahip nesneler (örneğin, oluşturma, çizim, tıklama vb.);
  • Odalar - oyun odaları (ekranlar). Her ekran için kendi odanızı yapmanız gerekir. Çok rahat;
  • Arka plan - odayı doldurabileceğiniz arka planlar. Fayans seti olarak da kullanılır
Gerisi şimdilik bizi ilgilendirmiyor.

Game Maker'daki sprite nedir?

Bu, oyunda kullanılan resim/animasyondur. Şekli ve boyutu değiştirilebilen kendi maskeleri vardır. Maske, görüntünün nesne çarpışma olaylarına tepki veren (eğer bu hareketli grafik bir nesneye atanmışsa) ve ona tıklayan bir alanıdır. Çizim noktasını (Orijin) örneğin merkezden, köşeden veya başka bir noktadan ayarlayabilirsiniz.

Ayrıca bir hareketli grafik için Doku Grubu da ayarlayabilirsiniz. Oluşturmayı optimize etmek için gereklidir (örneğin, artık bir oyun ekranımız olduğunda menü ekranında kullanılan görsellerin bulunduğu doku sayfalarını bellekte tutmaya gerek yoktur). Her Doku Grubu için çalışacakları platformu belirleyebilirsiniz. Örneğin Android, Windows 8 tabletlere göre daha az ayrıntılı görsellere sahip olabilir.

Game Maker'daki nesne nedir?

Bu, kendi yöntemlerine (işlevlerine) sahip bazı varlıkların açıklamasıdır. Her nesne kendisini çizer (aksi belirtilmediği sürece), standart olaylara tepki verir - tuşlara basma, bir karaktere tıklama vb.... OOP'a benzer şekilde bu bir sınıftır.

Game Maker'daki örnek nedir?

Bir nesne yalnızca bir varlığın açıklamasıysa, o zaman örnek, bir nesnenin örneğidir, oyunun kendisinde uygulanmasıdır. Bir örnek yaratarak ona hayat vermiş olursunuz ve artık açıklaması nesnede bulunan tüm olaylar tepki vermeye başlayacaktır.
OOP'a benzer şekilde bu bir nesnedir.

Yapmanız gereken ilk şey yeni bir oda oluşturmaktır (sol panelde Odalar - Oda Oluştur'a sağ tıklayın). Buna rm_game adını verelim. Ayarlar sekmesinde pencere boyutlarını - Genişlik - 800, Yükseklik - 480, Hız - 60 olarak ayarlayalım. Oyunumuz 800x480 pencerede gerçekleşecek, fps 60 kareyi geçmeyecek ve eğilimli olacaktır. Kaydet ve kapat.

Biraz sprite ekleyelim. Sprites klasörüne sağ tıklayın -> Sprite Oluştur. Buna spr_unit_shooter adını verelim, örneğin 54x54 boyutunda bir görsel yükleyelim (makalenin sonunda Github'da mevcut) ve ortalayalım (Ortalama düğmesi). “OK” tuşuna basılarak veriler kaydedilir.

Şimdi ilk üniteye ihtiyacımız var. Klasik bir atış tesisi olsun. Ancak bundan önce, tüm kullanıcı birimlerinin ebeveyni olacak bir nesne oluşturmak istiyoruz (evet, yaklaşık olarak OOP'daki kalıtımla aynı). Bu sayede tüm birimler için tekrarlanan mantığın önüne geçebilir ve ayrıca aşağıda göreceğiniz gibi, bu nesnenin oyun sırasında oluşturulan tüm “çocuklarına” erişebilirsiniz.

Spritelar ve odalar için benzer bir prensibi kullanarak boş bir nesne yaratıyoruz. Buna o_unit_parent adını verelim ve şimdilik onunla başka bir şey yapmayalım. Şimdi o_unit_shooter'ı oluşturalım ve Parent sütununda o_unit_parent'ı seçelim. Hadi ona bir sprite verelim - spr_unit_shooter. Bunu yapmak için adın altında bulunan düğmeyi kullanın.

Spriteları, nesneleri, odaları vb. adlandırın. bunu istediğiniz gibi yapabilirsiniz, ancak daha sonra kafanızın karışmaması için, şeyleri hemen özel adlarıyla çağırmak daha iyidir, örneğin spr_ ön ekine sahip spritelar, obj_ veya o_ nesneleri, komut dosyaları - scr_ vb.

Artık, bir odada her o_unit_shooter nesnesi oluşturduğunuzda, seçtiğiniz karakteri otomatik olarak çizecektir (tabii ki kodla geçersiz kılmadığınız sürece).

Karakter programlı olarak da ayarlanabilir ancak bu durumda soldaki Proje Yapısı ön izlemesinde görüntülenmez. Şimdi bir nesne örneği oluşturulduğunda tetiklenecek bir olayı ekleyelim. Bu durumda, eğer varsa değişkenlerin ilk başlatılmasını ayarlamanız gerekir. Etkinlik Ekle'ye tıklayın. Gördüğünüz gibi Game Maker her nesnenin çok sayıda olayı yakalamasına olanak tanıyor. İlgileniyoruz - Yaratmak.

Sağda görebileceğiniz gibi, birkaç sekmedeki Eylemler kapsayıcısında çok sayıda sürükle"n"bırak öğesi vardır ve bunların yardımıyla teorik olarak tek bir yazmadan tamamen tam teşekküllü bir oyun oluşturabilirsiniz. kod satırı. Ancak bu sapıklar içindir ve muhtemelen Game Maker 2.0'da bu gereksiz işlevsellik sonunda kaldırılacaktır.

Control sekmesine gidip Execute code ikonuna sürükleyelim veya sağ tıklayalım. Oyun mantığını yerleştirebileceğiniz bir metin düzenleyici açılacaktır.

Hatırlayacağınız gibi birliklerin belli bir periyotta atış yapması gerekiyor. Bu çok kolay bir şekilde yapılabilir. Create olayına şu kodu yazacağız: alarm = Room_speed * 2;
Bu, Room_speed*2 adımlarından (kareler) sonra tetiklenecek olan 0 numaralı alarmı başlattığımız anlamına gelir. oda hızımız 60'tır, bu da yaklaşık olarak bir saniyeye eşittir. Yani alarm 120 kare (2 saniye) sonra çalacaktır. alarm bir fonksiyon, daha doğrusu bir nesne olayıdır, adım sayacı 0'a ulaştığı anda tetiklenir. Diğer tüm olaylar gibi Add olayı aracılığıyla eklenir. Şimdi alarma ekleyeceğimiz mantığı yazmamız gerekiyor ama önce tesisimizin neyle atış yapacağını oluşturalım.

16x16 boyutunda yeni bir sprite spr_bullet oluşturun ve ortalayın. Şimdi yeni bir o_bullet nesnesi oluşturup ona yeni oluşturulan sprite'ı veriyoruz. Create olayına hspeed = 7; kodunu ekleyin. önceki nesneyle tamamen aynı. Bu çizgi ile cismin yatay olarak 7 hızla hareket edeceğini belirtiyoruz (hspeed = yatay hız, eğer anlamayan varsa). Bu her nesnenin yerleşik bir özelliğidir. Sıfırdan farklı bir değer atandığında bu nesne hareket etmeye başlayacaktır. belirtilen miktar piksel (bizim durumumuzda 7 sağa) her adımda (Adım). hspeed = -7 olarak ayarlarsak; - nesne her adımda -7 piksel hareket edecektir; sağdan sola hareket edecektir.

İşte bu kadar, o_unit_shooter nesnesine dönelim ve yeni bir olay oluşturalım - Alarm 0. Bu olayda yazdığımız kod, Create olayında oluşturduğumuz sayaç çalıştırıldığında tetiklenecektir. Alarm 0 olayında bitkinin vurduğu “kurşunlar” (orijinalinde bezelye) yaratacağız. Bu kodu ekleyelim:

/// var b = example_create(x + sprite_width/2, y, o_bullet); b.derinlik = derinlik + 1; alarm = oda_hızı * 2;
Bu kodu analiz edelim.

/// ateş et sadece etkinliğe giderken görüntülenecek bir yorumdur. Varsayılan olarak, pek bilgilendirici olmayan "Kod parçasını çalıştır" gösterilir. Bu yüzden kod editörüne giderek zaman kaybetmemek için bu tür yorumların yazılması tavsiye edilir.
var b = example_create(x + sprite_width/2, y, o_bullet);
var b - yalnızca bu etkinlikte kullanılabilecek yerel bir değişken bildiririz. Etkinlik tamamlandıktan sonra hafıza serbest kalacak ve bu değişkene erişemeyeceksiniz.
example_create(x + sprite_width/2, y, o_bullet); - nesnenin yeni bir örneğini bu şekilde yaratırız ve onu x koordinatlarına yerleştiririz: x + sprite_width/2, y - y. İÇİNDE bu durumda x ve y ana nesnenin koordinatlarıdır - o_unit_shooter. o_bullet yarattığımız nesnedir.
b.derinlik = derinlik + 1; - bu satır, yeni oluşturulan o_bullet örneğinin o_unit_shooter'dan 1 katman daha aşağı yerleştirileceği anlamına gelir.
Son satır, alarmı tekrar çalıştırdığımız anlamına gelir - tesis sürekli ateş etmelidir.

Hatırlayacağınız gibi orijinalde bitki örtüsünü yalnızca belirli hücrelere yerleştirebiliyorsunuz. Bitkinin hangi sınırlar dahilinde yerleştirilebileceğini görsel olarak netleştirmek için bir arka plan oluşturalım ve odamızı bununla dolduralım. Arka Planlar - Arka Plan Oluştur - Arka Planı Yükle seçeneğine sağ tıklayın, istediğiniz görüntüyü seçin, örneğin 64x64 piksel, buna bg_grass adını verin. Odamıza (rm_game) gidin, Arka Planlar sekmesine gidin, bir saniye önce oluşturulan arka planı seçin. Resimdeki gibi görünmüyorsa lütfen kutuları işaretleyin.

Şimdi ilk başlatmayı yapacak bir tür başlangıç ​​nesnesine ihtiyacımız var. Yeni bir nesne yaratıyoruz ve buna örneğin o_game adını veriyoruz. Bu nesnenin alandaki bir tıklamaya tepki vermesine izin verin. Bunu yapmak için bir etkinlik ekleyin - Fare -> Genel fare -> Genel sol serbest bırakıldı. Normal bir fare olayı, bir nesneye doğrudan tıklamak anlamına gelir, ancak o_game'in kendi sprite+maskesi vb. olmadığı için. Oyuncunun oyun alanındaki herhangi bir noktaya tıklayabilmesine ihtiyacımız var; tüm tıklama olaylarını yakalamamız gerekiyor. Global Mouse'un yaptığı da tam olarak budur. Genel sol serbest bırakma, oyun penceresinin içinde bir yerde dokunmatik ekrana bir fare tıklaması veya dokunmanın yapıldığı anlamına gelir (olay, parmak serbest bırakıldığında tetiklenir).

Bu etkinliğe aşağıdaki kodu ekleyelim:

Var tBgWidth = arka plan_get_width(bg_grass); var tBgHeight = arka plan_get_height(bg_grass); var iX = mouse_x - mouse_x % tBgWidth + tBgWidth; var iX = mouse_x - mouse_x % tBgWidth + tBgWidth/2; var iY = mouse_y - mouse_y % tBgHeight + tBgHeight/2; if (instance_position(iX, iY, o_unit_parent) != hiç kimse)( çıkış; ) example_create(iX, iY, o_unit_shooter);

İşlem sonrasında noktalı virgül koymanıza gerek yoktur, bu kodun mantığını değiştirmez ve hataya sebep olmaz. Ama eğer bahse girebilirsen, neden yapmayasın? Evet ve daha tanıdık.

İlk dört satırda yerel değişkenleri tanımlıyoruz. arka plan_get_width, arka plan_get_height arka planımızın genişliğini ve yüksekliğini döndüren yerleşik işlevlerdir. Gördüğünüz gibi iX ve iY'yi hesaplamak için bu verilere ihtiyacımız olacak. iX ve iY, o_unit_shooter nesnesini başlatacağımız koordinatlar olacaktır. mouse_x, mouse_y - Game Maker'da yerleşik olarak bulunan ve fare imlecinin (parmak) mevcut koordinatlarını saklayan global değişkenler (yani her yerden erişebileceğimiz değişkenler). Çünkü Global sol serbest bırakılma olayında çalışıyoruz, kullanıcının sol fare düğmesini bıraktığı (parmağını kaldırdığı) son koordinatları saklıyorlar. Sonuçları iX, iY değişkenlerine atanan matematiksel işlemler, o_unit_shooter nesnesinin bir örneğinin bg_grass arka plan hücresinin tam ortasına yerleştirileceği koordinatları hesaplamak için gereklidir. Onlar. bunu Plants Vs.'de hatırlayın. Zombi bitkisi Onu herhangi bir yere koyamazsınız, yalnızca belirli bir noktaya yerleştirebilirsiniz, ancak herhangi bir yere tıklayabilirsiniz ve bitki tam olarak doğru yere yerleştirilecektir. Yukarıdaki kodun tamamı bunu yapar.

example_position (iX, iY, o_unit_parent) != noone'un kontrol edilmesi, ana nesnesi o_unit_parent olan herhangi bir örneğin (nesne örneğinin) iX, iY koordinatlarında bulunup bulunmadığına baktığımız anlamına gelir. Artık yalnızca bir devralınabilir birimimiz olduğundan - o_unit_shooter, oyun alanında herhangi bir o_unit_shooter örneği olup olmadığını kontrol ediyoruz, ancak yeni özel birimler eklediğimizde bile kodun çalışabilmesi için kontrole o_unit_parent yazıyoruz. hiç kimse ("hiç kimseden") diğer dillerde bir tür null benzeridir.

Çıkış - olayın yürütülmesini sonlandıran kod. Onlar. iX, iY koordinatlarında zaten bir birim varsa çıkış tetiklenir ve o_unit_shooter örneği oluşturulmaz çünkü sonraki tüm kodun yürütülmesini keseriz. Bir hücrede 2 kullanıcı biriminin duramaması için buna ihtiyacımız var.

Artık ilk düşmanı eklemenin zamanı geldi. Yeni bir nesne oluşturalım ve tekrar temel bir ana nesne oluşturalım. Buna ebeveyni olacak o_enemy_zombie ve o_enemy_parent adını verelim. Bir spr_enemy_zombie sprite oluşturalım, onu ortalayalım ve o_enemy_zombie'ye atayalım.

Tüm düşmanların özelliği bitkilere doğru ilerlemek olduğundan Create eventinde o_enemy_parent içerisinde bu kodu oluşturacağız:

CH hızı = -4; hhız = cHhız; HP = 10; canAttack = doğru;
cHspeed, daha önce gördüğümüz hspeed'e değerini atadığımız bir kullanıcı değişkenidir. Neden sadece hspeed = -4; yazmıyorsunuz? - sonra göreceksin.

Daha önce kullanıcı değişkenlerini var yapısını kullanarak tanımlamıştık ancak bunu burada yapmıyoruz. cHspeed = -4 arasındaki fark nedir? ve var cHspeed = -4;?
Her şey basit - ilk durumda, değişkene bu nesnenin kodunun herhangi bir noktasından erişilebilir olacak ve başka herhangi bir nesneden erişilebilir, ancak yalnızca hangi nesneye eriştiğimizi belirtmeyi unutmadan. Şimdilik bu konuyu araştırmaya gerek yok. Bu değişkenin, nesne örneğinin bildirildiği andan itibaren tüm ömrü boyunca mevcut olduğunu hatırlıyoruz. var cHspeed = -4 olması durumunda; yalnızca oluşturulduğu etkinlik süresince mevcut olacaktır.

Aslında ona başka bir nesneden de erişebilirsiniz, ancak oluşturulduğu olayın zaten sona erdiği anda ona başka bir nesneden erişirseniz, bu bir hataya neden olur - tanıdık boş işaretçi, çünkü zaten yetersiz bellek boşaltıldı.

Eğer hspeed veya wspeed fonksiyonlarını kendiniz beğenmediyseniz Step olayında x veya y değerini değiştirerek kendiniz uygulayabilirsiniz. Bu özellikler bunu sizin için yapar.

HP, düşmanların can puanı sayısını saklayacağımız başka bir değişkendir. Her örnek bu değişkene "sahip olacaktır" ancak maksimum can puanı sayısı farklı şekiller farklı düşmanlar, yani bu değeri bir şekilde yeniden tanımlamanız/sıfırlamanız gerekir. Veya tüm düşmanlara aynı sayıda can verebilir, örneğin 100 can verebilir ve düşmanın alacağı hasarın bağlı olacağı savunma kavramını tanıtabilirsiniz, ancak artık işleri karmaşıklaştırmanın bir anlamı yok, değil mi? Bu yüzden sadece tek bir değişkenle idare edeceğiz: HP.

Gml'nin Game Maker'da kullanılan dil olduğunu ve büyük/küçük harfe duyarlı olduğunu, HP, hP, Hp ve hp'nin farklı değişkenler olacağını unutmayın.

CanAttack basitçe true değerini atadığımız bir değişkendir. Şimdilik sadece yazıp unutacağız.

HP değerimiz her düşman için farklı olacağından bu değeri bir şekilde yeniden tanımlamamız gerekiyor. Çok çok basit. o_enemy_zombie nesnesine gidelim, Create olayına reaksiyon oluşturalım ve kodu yazalım:

Event_inherited(); HP = 20;
işlev event_inherited(); ve mirasla ilgilenir. Onlar. şimdi o_enemy_zombie kodu çalıştıracak:

CH hızı = -4; hhız = cHhız; HP = 10;
Bu işlevin “içe aktardığı” ve ardından değerin satır tarafından yürütüldüğü - HP = 20;
Onlar. aslında Create olayının sonunda o_enemy_zombie nesnesi aşağıdaki özelliklere sahip olacaktır:

CH hızı = -4; hhız = cHhız; HP = 20;
event_inherited();'i unutursak; veya o_enemy_zombie nesnesi için ana nesneyi belirtmeyi unutursak, düşman hareket etmeyecek ve bu nesnenin cHspeed değişkenine erişmeye çalışırken hata görünecektir.

Harika, eğer başka türde bir düşman yaratmak istiyorsak, Create etkinliğinde aynı şeyi yazacağız ve HP miktarını gerekli miktara değiştireceğiz:

Event_inherited(); HP = 100;

Zombilerin can puanı olduğu için bitkinin de can puanı olması gerekir. o_unit_parent nesnesinin Create olayına HP = 20; kodunu kendiniz ekleyin. ve event_inherited(); satırı o_unit_shooter nesnesinin Create olayına.

Biliyor musunuz?

Create olayında herhangi bir şeyi yeniden tanımlamanız veya eklemeniz gerekmiyorsa, event_inherited(); kodunu ekleyin. Etkinlikte başka bir mantığa gerek yok - Game Maker'ın kendisi bunu sizin için yapacak. Aynı durum yalnızca Create için değil, diğer tüm etkinlikler için de geçerlidir.

Harika, zombimiz artık yürüyor ama mermiler ona çarpmıyor ve bitkiler onu yavaşlatmıyor. Önce ilk sorunu çözelim. Hadi o_bullet'e gidelim ve olaya yeni bir tepki oluşturalım - Olay Ekle -> Çarpışma -> o_enemy_zombie. Bu olay o_bullet ve o_enemy_zombie birbirine çarptığında çağrılacaktır. Çarpışma, makalenin başında okuduğunuz maske kullanılarak kontrol edilir. Kodu ekleyelim:

İle(diğer)( HP -= 5; if (HP<= 0){ instance_destroy(); } } instance_destroy();
Bu çok ilginç bir nokta. diğeri ise olayın bu anında çarpışmanın meydana geldiği nesnenin örneğidir. Doğal olarak çünkü bu kod o_enemy_zombie nesnesinin bir örneğiyle çarpışma olayındadır, diğerinde ise yalnızca o_enemy_zombie örneği olacaktır.

()() ile bu diğer öğeye erişiriz. () içinde gerçekleşen her şey yalnızca nesnenin bu örneğiyle ilgilidir. Böylece HP -= 5; - Bu, düşmandan 5 can puanının çıkarılmasıdır. if(HP'de)<= 0){} мы сравниваем количество очков жизни тоже именно у этого объекта. Помните я немного выше говорил про разницу между обычным объявлением переменной и с переменной через var. Вот этот пример должен вам окончательно прояснить ситуацию. Т.к. переменная HP у нас объявлена не через var, то она доступна в любой момент времени. Так что с помощью конструкции with мы можем к ней получить доступ. Альтернативный способ обращения к переменной другого объекта выглядел бы так:

Diğer.HP -= 5; if(diğer.HP<= 0){ with(other){ instance_destroy(); } } } instance_destroy();
Ancak değişkenlere bu şekilde erişmek, özellikle daha fazla mantık varsa, ancak yine de bazı durumlarda uygulanabilirse daha az kullanışlıdır.

Unutmayın, Create olayında bir değişkeni bildirmediyseniz ve kodda değişkene bildirilmeden önce erişirseniz, bu değişkenden herhangi bir veri okumaya çalıştığınızda hata verecektir.

example_destroy(); fonksiyonunun; olduğunu anlamak için çok fazla İngilizce bilgisine sahip olmanıza gerek yok. bu nesne örneğini (örneği) siler.

Dolayısıyla tüm bu kod, bir çarpışma sırasında bir zombiden 5 yaşam puanı aldığımız ve 0 veya daha az olursa onu yok ettiğimiz anlamına geliyor. Sonuç ne olursa olsun sonunda kurşunumuzu çıkarıyoruz. Daha basit olamazdı. Genel olarak zombileri sağlıklarını kendi başlarına izlemeye zorlamak muhtemelen daha iyi olurdu, ancak şimdilik bununla ilgilenmiyoruz. Ancak bu başka bir hikaye, bir optimizasyon meselesi.

Zombilerimizin yalnızca hasar alması doğru olmazdı. Hasar verme yeteneğini de eklememiz gerekiyor. Öncelikle o_enemy_parent nesnesinin Create olayına yeni bir değişken ekleyelim.

Etkin = doğru;
Daha önce bahsettiğim Step etkinliğine bir göz atmanın zamanı geldi. Bu olay her kareyi tetikler. Basit. Room_speed 60 ise bu olay saniyede yaklaşık 60 kez tetiklenecektir. Bu kodu o_enemy_zombie nesnesinin Step -> Step olayına ekleyelim.

(!isAktif) ise çıkış; var tBgWidth = arka plan_get_width(bg_grass); var leftCellCenterX = x - x % tBgWidth - tBgWidth/2; var frontEnemy = example_position(leftCellCenterX, y, o_unit_parent); if (frontEnemy != noone)( var frontEnemySprtWidth; with(frontEnemy)( frontEnemySprtWidth = sprite_width; ) if (x - sprite_width/2 - frontEnemy.x - frontEnemySprtWidth/2<= 12){ hspeed = 0; if (!canAttack){ exit; } canAttack = false; alarm = room_speed * 1.2; // cantAttack ->doğru; with(frontEnemy)( HP -= 5; if (HP<= 0){ instance_destroy(); } } } }else{ hspeed = cHspeed; }

Bunda yanlış bir şey yok, neredeyse tüm tasarımlar zaten size tanıdık geliyor.
if (!isActive) çıkış; - nesne aktif değilse, yani dinleniyor/yeniden şarj oluyor/salınım yapıyorsa, bu olay yürütülmeyecektir. Sonraki iki satırda, örneğimizin merkezinin şu anda bulunduğu hücrenin solunda bulunan hücrenin merkezinin koordinatlarını alıyoruz (x'in Başlangıç ​​noktasının koordinatlarını döndürdüğünü ve onu tam olarak ayarladığımızı unutmayın) sprite'ın ortasında). Daha sonra kullanıcı biriminin koordinatlarda (leftCellCenterX, y) bulunup bulunmadığına bakıyoruz. Orada bir şey varsa sonraki mantık devreye giriyor ama birazdan devamı geliyor, eğer orada bir şey yoksa Create olayında oluşturduğumuzu hatırladığımız cHspeed değişkeninin değerini hspeed atadık. İşte bu noktada işe yaradı. Bunun anlamı şudur: Eğer zombimiz bitkiye saldırmak için durmuş ve bitkiyi yok etmişse yoluna devam etmesi gerekmektedir. Elbette cHspeed değişkenine giremezsiniz ancak o zaman hareket hızını nereye ayarladığınızı hatırlamanız gerekecektir ve bu unutulur.

Eğer zombilerin önünde hiçbir engel yoksa, şimdi savaşmamız gereken ana dönüyoruz. İlk satırlar çok ilginç çıkıyor, bir de dikkat çekici. Gerçek şu ki, frontEnemySprtWidth yerel değişkenini bildirerek ona frontEnemy örneğinde bir değer atadık. Programlamaya aşina olanlar şunu söyleyecektir, ancak bu durumda zombimizin frontEnemySprtWidth değişkenine değil, aynı isimdeki bir değişkene, ancak frontEnemy örneğinin değişkenine erişiyoruz. Öyle değil, asıl mesele, yerel değişkenlerin (var aracılığıyla bildirilen) bu olayın içinde her yerde, hatta frontEnemy örneğinin içinden bile görünür hale gelmesidir. Yani kodda bir hata yok; aslında tam olarak zombinin içinde local olarak tanımlanan değişkene ulaşıyoruz. Bu noktayı anlamadıysanız, deneyin veya yardımı okuyun, orada her şey mükemmel bir şekilde açıklanıyor ve devam ediyoruz.
FrontEnemySprtWidth'e zombimizin bir hücre solunda bulunan kullanıcı biriminin (bitki) sprite uzunluğunu (genişliğini) atadık. Var frontEnemySprtWidth = sprite_get_width(spr_unit_shooter); ile idare edebilecekken neden bu kadar anlaşılması zor bir yapıyı çitlememiz gerektiğini diyeceksiniz. Cevap basit - artık bir bitkimiz var ve hangi sprite ile iletişime geçeceğimizi biliyoruz, ancak yeni birim türleri (ayçiçekleri vb.) eklerken, içinde ne tür bir nesnenin olduğunu bulmak için hantal bir anahtar yapısı oluşturmamız gerekecek. önümüzde ve bu sorun basitçe çözüldü yeter.

Daha sonra kullanıcı biriminin en sağ noktası ile zombimizin en sol noktası arasındaki mesafenin 12 pikselden az olup olmadığını kontrol ediyoruz, ardından zombimizi durduruyoruz, zombimizin saldırıp saldıramayacağını kontrol ediyoruz (önceden canAttack değişkeninin değerini kontrol ediyoruz) o_enemy_parent nesnesinin Create olayında oluşturulan), artık saldırının imkansız olduğunu ve bir dahaki sefere Room_speed * 1,2 kare (60 * 1,2'den sonra) aracılığıyla yapılabileceğini söylediğimiz yürütme koduna devam ediyor - bunu alarmda yapıyoruz (bunu o_enemy_parent nesnesinin ilgili olayına (Alarm 0) kendiniz ekleyin; burada canAttack = true; kodunu yazın). Saldırmak mümkün ise tesis örneğinden 5 can puanı alıp hala hayatta olup olmadığını kontrol ediyoruz, değilse yok ediyoruz.

Düşman mükemmel bir şekilde hazırlanmıştır - tesisi yok ederse hareket eder, saldırır ve hareket etmeye devam eder, ancak bir dezavantajı vardır - mevcut değildir. Sadece düşmanımızın bir tanımını oluşturduk, şimdi zombileri oyun alanına yerleştirmemiz gerekiyor. o_game nesnesinin Create olayına dönüyoruz. Kodu ekleyelim
alarm = oda_hızı; // düşmanlar oluştur

Onlar. 60 kareden sonra Alarm 0 tetiklenecek ve bir zombi yaratılacak, değil mi? HAYIR. Bu Alarm için mantık oluşturmadık. Ve buradaki kod da basittir:

Var tBgHeight = arka plan_get_height(bg_grass); var eY = irandom(oda_yüksekliği - oda_yüksekliği % tBgHeight); eY = eY - eY % tBgYükseklik + tBgYükseklik/2; example_create(room_width + sprite_get_width(spr_enemy_zombie)/2 + 1, eY, o_enemy_zombie); alarm = oda_hızı * 3;
Her şey basit - bunu karmaşıklaştırmayacağız ve her 3 saniyede bir X koordinatlarında (60 kare * 3) bir o_enemy_zombie örneği oluşturacağız: Room_width + sprite_get_width(spr_enemy_zombie)/2 + 1 yani. ekran sınırından tam olarak bir piksel sağda, yani zombiler başlangıçta görünmez ve Y rastgele bir hücredir. Room_width ve Room_height, zaten anladığınız gibi, odamızın genişliği ve yüksekliğidir. Onlar. Sırasıyla 800 ve 480.

Bunların hepsi harika, ancak birisinin o_game nesnesinin bir örneğini de yaratması gerekiyor, aksi takdirde tüm bölüm hiçbir anlam ifade etmez. Ancak son adımımız çok basit - odaya gidin rm_game -> Nesneler -> menüden o_game'i seçin ve odanın herhangi bir yerine yerleştirin. Alternatif bir seçenek şuna benzer: Ayarlar sekmesi -> Oluşturma Kodu (bu, bu odaya gittiğimizde çalışacak koddur). example_create(0,0, o_game); satırını ekleyin

Herhangi bir koordinat mümkündür. Şimdi şu soruyu sorabiliriz: Game Maker rm_game odasını başlatması gerektiğine nasıl karar verecek veya "peki ya çok sayıda odamız varsa, hangi Game Maker ile başlayacak?" Her şey her zamanki gibi basit; en üstteki oda ilk önce başlar (sıraları fareyle sürüklenerek değiştirilebilir). Artık elimizde sadece bir tane var, o yüzden hemen başlayacak.

Şimdi şöyle bir şeye sahip olmalıyız:

Böylece ilk bölüm tamamlanıyor. Tebrikler, oyunun bir prototipini yaptık. Yapılacak çok az şey kaldı; bunu tam teşekküllü bir oyuna dönüştürün, biz de ilerleyen bölümlerde bunu yapacağız.

Bu bölümde mümkün olduğunca çok özelliği kullanarak Game Maker'ın temel kavramlarını tanıttık. Bazı noktalar çok rasyonel bir şekilde ifade edilmedi; yeniden yapılabilirler ve değiştirilmeleri gerekir, ancak hepsi birden değil. Neler olup bittiğini ilk kez anlamak için amatörce yazmanın daha iyi olduğunu düşünüyorum.

Dersten de görebileceğiniz gibi, Game Maker'ın mevcut sürümü bazı açılardan ideal değil, birçok şeyi aklınızda tutmanız gerekiyor, ancak Game Maker'da geri kalan her şeyi yapmak daha kolay. Ufak bir rahatsızlık buna değer.

Söz verdiğimiz gibi, bu eğitimde olaylara, eylemlere bakacağız ve birkaç mini oyun yaratacağız.
Önce olaylar. Odadaki örneklere bir şey olduğunda, onlara olayı yürütme izni verilir.

Nesne özelliklerinde ortadaki sütuna sağ tıklayıp Etkinlik ekle(etkinlik ekle) seçeneğini belirlediğinizde aşağıdaki pencere açılacaktır:

Yaratmak (Yaratılış) - nesne oluşturma olayı. Odada bir nesne göründüğünde tetiklenir.
Tahrip etmek (yıkım) - nesnenin yok edilmesi olayı. Bir nesneyi bir eylemle yok ettiğimizde ateşlenir.
Alarm (Çalar saat, jargon. Alarm) - alarm olayı. Daha sonra tartışılacaktır.
Adım (Adım) oyunun her adımında meydana gelen bir olaydır. Saniyedeki adım sayısı oda ayarlarında belirlenir
Çarpışma (Çarpışma) – iki örneğin spriteları (veya daha doğrusu maskeleri) kesiştiğinde meydana gelen bir olay
Tuş takımı (tuş takımı) - belirli bir tuşa basıldığında her zaman meydana gelen bir olay. Tüm örnekler için aynı anda gerçekleşir, dolayısıyla aynı klavye olaylarının farklı nesnelere iletilmesi çok nadirdir. Ayrıca klavyeye basılan ve bırakılan olaylar da vardır. Bir olayın bir kez gerçekleşmesi gerekiyorsa (örneğin bir atış) kullanılması uygundur.
Fare (fare) – fareyi bir örneğin üzerine bastığınızda/bıraktığınızda/üzerine getirdiğinizde meydana gelen bir olay. Fare bir nesnenin üzerine gelmediğinde meydana gelen genel fare olayları da vardır.
Diğer olaylar (diğer olaylar):
Dış oda (Odanın dışında) - Olay, örnek odanın sınırlarının dışında olduğunda meydana gelir.
Kesişme sınırı (Sınır geçişi) - Olay, bir örnek oda sınırını geçtiğinde meydana gelir.
Oyuna başla (Oyunun başlangıcı) - oyun başladığında meydana gelen bir olay. Mini oyunlarda nadiren kullanılır.
Oyun bitti (Oyunun sonu) - Etkinlik oyun bittiğinde gerçekleşir.
Oda başlangıcı (Odanın başlangıcı) - Bu olay, odanın başlatıldığı tüm durumlarda gerçekleşir.
Oda sonu(Odanın sonu): Bu olay, odanın sona erdiği tüm durumlarda gerçekleşir.
Animasyon sonu (Animasyonun sonu) - animasyon kareler içerir ve bunlar birbiri ardına gösterilir. Gösterildikten sonra son kare ilki gösteriliyor. Şu anda bu olay meydana geliyor.
Yolun sonu (Yolun sonu): Örnek yolun sonuna ulaştığında olay meydana gelir. Aşağıdaki derslerde bunlar hakkında daha fazla bilgi edineceksiniz.
Kullanıcı tanımlı (Özel Etkinlikler): Bu tür 16 olay olabilir. Özel bir işlevi kullanarak onları kendiniz çağırmadığınız sürece gerçekleşmeyecekler.
Peki, şimdi olayların sırası:
-Adım olaylarını başlat ( Adım etkinliklerinin başlangıcı)
-Alarm olayları ( Zamanlayıcı Etkinlikleri)
-Tuş takımı ( Klavye etkinlikleri)
-Fare olayları ( Fare Olayları)
-Normal adım olayları ( Adım Etkinlikleri)
-(tüm örnekleri yeni konumlarına ayarlama)
-Çarpışma olayları ( Çarpışma Olayları)
-Adım olaylarını sonlandır ( Adım etkinliklerinin sonu)
-Çizim etkinlikleri ( Çizim Etkinlikleri)
Artık nesneye olaylar sağlayabiliriz ama neden? Yapılacak işlemler için.
Şimdi hareketin ana eylemlerine bakalım:
Sabit Taşı (Sabit hareket)
Bir nesneye belirli bir yön ve hız vermek için bir eylem kullanılır. Hareket yönü ilgili tuşlara basılarak belirlenebilir. Orta düğme nesneyi durdurmak anlamına gelir. Hareket hızı ilgili satırda gösterilir. Birden fazla yön seçerseniz nesnenin hareket yönü işaretlenen yönler arasından rastgele seçilecektir. Bununla örneğin bir canavar hem sağa hem de sola hareket etmeye başlayabilir.
Hız Yatay (Yatay hız)
Bu eylemle örneğin yatay hızını değiştirebilirsiniz. Değişiklikler göreceli (Göreceli kutusunu işaretlerseniz) veya mutlak (varsayılan olarak) yapılabilir. Pozitif değerörneği sağa, negatif - sola taşır.
Hız Dikey (Dikey hız)
Benzer şekilde bu eylem örneğin dikey hızını da değiştirir. Pozitif hız örneği aşağı doğru hareket ettirir, negatif hız ise onu yukarı hareket ettirir
Ters Yatay (Yatay olarak genişlet)
Bu eylem yatay hızı tersine çevirir.Bunu örneğin bir nesnenin duvardan sekmesi gerektiğinde kullanabilirsiniz.
Ters Dikey (Dikey olarak genişlet)
Aynı şekilde bu hareketle dikey hız da tersine çevrilir.
Konuma Git (Konuma taşı)
Bu eylem, örneği belirtilen konuma taşır. İlgili onay kutusunu işaretlerseniz konum, örneğin mevcut koordinatlarına bağlı olarak seçilecektir.
Başlangıç'a Git (Başlangıç ​​pozisyonuna git)
Bu eylem, örneği oluşturulduğu konuma taşıyacaktır.
Rastgele'ye Atla (Rastgele hareket et)
Eylem, örneği katı nesnelerin bulunmadığı bir konumla oda içinde rastgele bir noktaya taşır.
Sıçrama (Sekme)
Bu eylemi katı bir nesneyle çarpışma durumunda yaparsanız, o zaman olduğu gibi sıçrayacaktır. gerçek hayat"Geliş açısı" kanununa göre yerçekimi dikkate alınmadan açıya eşit yansımalar." Birçok durumda bu oldukça makul görünüyor.
Gerisini mini oyunlar yarattıkça öğreneceğiz.
Öyleyse başlayalım!
Yapmanız gereken ilk şey Game maker'a gitmek (kaptan olmadan neredeyiz?). Şimdi spriteları yükleyelim: Pac-Man resmine beş kez tıklayın. Önümüzde sprite özelliklerine sahip beş pencere açılacaktır. Sprites/tutorial1 klasöründen bomb, apple, wall, çilek, banana dosyalarını yükleyelim ve sırasıyla s_bomb, s_apple, s_wall, s_strawbery ve s_banana olarak isimlendirelim.
/*Ve şimdi biraz gramer. Karakterlerin, seslerin, nesnelerin ve diğerlerinin adları şunlardan oluşmalıdır:
yalnızca Latin harflerinden ve sembollerinden. Ayrıca adın prensibe dayalı olması gerekir
kaynak_adı_not, örnek: s_hero_jump. Bunun bir kahramanın atlama sprite'ı olduğu hemen anlaşılıyor. */

Şimdi üç ses oluşturalım ve bunları sound/tutorial1 klasöründen yükleyelim.Bunlara snd_click, snd_music, snd_boom adını verelim. Aynısını arka plan için de yapalım.
Nesneleri oluşturmaya başlayalım. İlk nesne bir duvardır. Buna o_wall adını verelim ve ona s_wall karakterini atayalım. Şimdi sertliğini ayarlayalım (Katı onay kutusu). Create etkinliğinde, ses çalma snd_music eylemini ekleyin
Yeni nesne o_apple'dır. İlgili sprite'ı ona atayalım ve “Create” eventini ekleyelim. İçinde, "Sabit Taşı" eylemini seçin, merkezi yön dışındaki tüm yönleri ayarlayın ve hızı 8'e ayarlayın. Bir duvar nesnesiyle çarpışma durumunda, "Sıçrama" seçeneğini ayarlayın ve sol fare düğmesi olayında Rastgele Zıpla'yı ayarlayın konumunda, argüman 50 ve “Göreceli” onay kutusuyla snd_click ve set_score seslerini çalın.

Sonuç olarak, şöyle bir şey elde etmelisiniz:


Şimdi o_strawbery nesnesi oluşturalım, s_strawbery'e sprite atayalım ve aynı işlemi olaylarda da yapalım, sadece hareket hızı 5, puan sayısı ise 30 olacak.
Bir o_banana nesnesi oluşturalım, ona bir sprite atayalım ve o_apple nesnesinin bir kopyasını oluşturalım.

Yalnızca Sabit Taşı'yı şu şekilde değiştirelim:

Ve puan sayısı 200'dür.
Şimdi bir o_bomb nesnesi oluşturalım ve ona bir sprite atayalım. “Oluşturma” olayına bir alarm saati ekleyeceğiz (ana2 menüsünden), adım sayısını 60 olarak ayarlayacağız. Ayrıca Rastgeleye Git eylemini de ekleyeceğiz. Alarm0 olayına örnek oluşturmayı ekleyin ve bomba nesnesini belirtin. Koordinatları değiştirmeyeceğiz; bomba yaratıldığında otomatik olarak rastgele bir konuma atlayacak. Ve son olarak farenin sol tuşu olayı. Aksiyon sesi s_boom, yüksek puanları gösterir ve oyun yeniden başlar.

Artık geriye bir oda oluşturup içine objeler yerleştirmek kalıyor, ben şöyle yaptım:


Peki, odaya bir arka plan yerleştirelim.
Şimdi F5'e tıklayın ve oluşturulan "şaheserin" keyfini çıkarın

Bilgisayar oyunları oynamak çok eğlencelidir. Ancak çok az kişi kendi oyununuzu yaratmanın çok daha ilginç olduğunu biliyor. Geçmişte kalkınma bilgisayar oyunlarıçok uzun, karmaşık ve kasvetli bir süreçti. Şimdi bile oyunların oluşturulması aylar sürüyor ve geliştirme ekipleri 20-100 kişiden oluşuyor! Ancak Game Maker programı ile birkaç akşam içerisinde kendi oyununuzu oluşturabilirsiniz. Elbette Diablo IV'ü yapmayacaksınız ancak oynaması eğlenceli ve ilginç olan basit oyunlar var. Oyun yapımcısı, programlama dilleri hakkında özel bilginiz olmadan iyi oyunlar yaratabileceğiniz, içgüdüsel olarak anlaşılır bir GUI ile donatılmıştır. Oyununuzun yeteneklerini genişleten yerleşik bir GML diline sahiptir, ancak buna daha sonra değineceğiz.

Şimdi Game maker 8.0 programının arayüzüyle tanışacağız.


1. Dosya adını içeren satırüzerinde çalıştığınız Game Maker sürümü ve mod ekranı (Basit modum var)
2. Ana menü. Dosya grubu ( dosya):
2.1 Yeni ( yeni) - Tamamen boş yeni bir oyun dosyası oluşturur
2.2 Açık ( açık) - önceden kaydedilmiş bir dosyayı açın. Geçerli sürümün, önceki sürümlerin ve yedeklerin (yedekleme dosyaları) dosyalarını açabilirsiniz. Sizinkinden daha yüksek sürümlerde oluşturulan dosyaları açmak imkansızdır 2.3 En son açılan (en son açılan) - Bu menüde program en son açılanları hatırlar dosyaları aç bunlara kolay ve hızlı erişim için.
2.4 Kaydet ( Kaydetmek) - yapılan değişiklikleri kaydeder.
2.5 Farklı kaydet... ( Farklı kaydet...) - yapılan değişiklikleri kaydeder ve dosya adını ve konumunu değiştirmenize olanak tanır
2.6 Yürütülebilir Dosya Oluştur... ( Yürütülebilir Dosya Oluştur...) - oyunu .exe formatında derler (ayrı uygulama)
2.7 Birleştirme Oyunu... ( Oyunu bağla) - bir oyunun kaynaklarını diğerine aktarır (tamamen birleştirir).
2.8 Gelişmiş Mod ( Gelişmiş mod) -kolay ve zor mod arasında geçiş yapmanızı sağlar
2.9 Tercih ( Ayarlar) - program ayarlarını değiştirmenizi sağlar
2.10 Çıkış ( çıkış)
Bu menü dışında başka bir şeye gerek yok sanırım (en azından 4 yıldır hiç açmadım)
3. Hızlı erişim çubuğu. Kaynak oluştur, aç, dosyayı kaydet, derle, oyunu çalıştır gibi en sık kullanılan menü öğelerini içerir.
4. Oyun kaynakları. Bir kaynağa sol tıklarsanız, onunla çalışmak için bir menü açılacaktır. Hadi daha yakından bakalım:
4.1 Spritelar ( spritelar) - nesnelere atanan resimler. Game Maker ile birlikte Sprites klasöründe yeterli sayıda sprite gelir.
Bir hareketli grafikle çalışmanın arayüzü basittir - kaydedin, düzenleyin ve boyutu:


4.2 Sesler ( sesler) - tek bir oyunun yapamayacağı ses dosyaları.
Buradaki arayüz neredeyse aynı: kaydet, yükle ve oynat:

4.3 Arka Planlar ( arka plan) - arka plan oyunda, daha sonra seviyenin eyleminin gerçekleşeceği arka planda. Arayüz spritelardakiyle aynıdır.
4.4 Nesneler ( nesneler) - Game Maker'ın ana kaynağı "a. Oyuna resim ve müzik ekleyebilirsiniz - ancak resimlerin hareket etmesi ve müziğin çalınması nasıl sağlanır? Bundan nesneler sorumludur. Ekran boyunca hareket edebilir, çarpışabilir, yaratılabilirler , yok edildi.Yukarıdakilerin hepsi olaylardır.Olayların meydana gelmesi sırasında nesnelere komutlar verilebilir.Örneğin:bir oyuncu ve bir jeton çarpışır.Oyuncuya jeton sesini çalması ve parayı yok etmesi için komut verilir. .Oyunlarınızda hareket ettiğini göreceğiniz tek şey nesnelerdir (aslında her şey değil ama bu konuda çok daha sonra).Bir nesne ile bir örnek arasındaki farkı da anlamak gerekir.Bir nesne bir örnektir.Ama o oyunda olan nesneler değil, örneklerdir. Tam kopya nesne, ancak bu türden çok sayıda kopya olabilir. Bir örnekten bahsettiğimizde, bir nesnenin belirli bir örneğini kastediyoruz. Nesne dediğimizde o nesnenin tüm örneklerini kastediyoruz.
Hızlı erişim araç çubuğundaki mavi topa tıklayın(3)


Buradaki arayüz seslerden veya resimlerden çok daha zordur. Sol tarafta bir karakter seçmek için bir pencere var, Görünür öğeler ( görünür) ve Katı ( sağlam). Ortada belirtilen olayların bir listesi bulunur. Sağda ise bu etkinliğe atanan eylemlerin bir listesi ve yeni eylemlerin ekleneceği bir pencere bulunur. Bir sonraki derste eylemler ve olaylar hakkında daha fazla bilgi bulacaksınız.
Ve son olarak Odalar ( Odalar). Burası arka planların ve nesnelerin bulunduğu yerdir - tek kelimeyle seviye. İlk menü nesne ekleme menüsüdür. Burada her şey açık; boş bir alana tıklıyorsunuz, bir nesne seçiyorsunuz ve onu odaya yerleştiriyorsunuz. Kurulumlar takip ediyor. Burada odanın uzunluğunu, genişliğini, hızını ve adını ayarlayabilirsiniz. Sonraki, arka planlardan sorumlu penceredir. Burada odadaki arka plan rengini seçebilir veya projede zaten mevcut olan bir arka planı ekleyebilirsiniz.

5. Bu Oyun yapımcısı"çalışan bir pencere

Bu kadar. Bir sonraki derste:
1. Olaylar ve bunların uygulanma sırası.
2. Temel eylemler
3. Bir mini oyun "tıklayıcı" oluşturmak

Bugünkü eğitimde Game Maker Studio 2'deki standart efektlere bakacağız. Bunların ne olduğu, nasıl kullanılacağı ve hangi tuzaklar olduğu.

Kursa devam ediliyor - Game Maker Studio 2'de oyun oluşturmanın temelleri

Önceki derse buradan ulaşabilirsiniz:

Standart efektlerle böyle şeyleri hayal bile etmeyin :)

GMS'de standart efektleri kullanmamak daha iyidir

Burada önemli bir açıklama yapmamız gerekiyor. Game Maker Studio 2'deki varsayılan efektler, çeşitli nedenlerden dolayı ciddi projeler için önerilmez.

Bunun temel nedeni, efektlerin performans açısından çok iyi optimize edilmemiş olmasıdır. Standart efektler programı (oyunu) çok ağır yükleyebilir, çünkü nasıl performans gösterdiklerini bilmiyoruz, ancak görünüşe göre çok iyi performans göstermiyorlar.

Standart efektler ağırdır, oyunların optimizasyonu ve performansına da değineceğim ama ilerleyen video ve yazılarda.

Tüm bu efektleri adımlara sığdırmak ve oyununuzun kare hızı (FPS) 50-100 ise özellikle tehlikelidir. Oyun onları saniyede 50-100 kez çizecek ama aynı anda 100-200 nesne için çizseniz ne olur? Elbette burada her şey askıda kalacak.

Genel olarak Game Maker'ı kapatmak oldukça kolaydır, bilgisayarıma takılan bir sürü oyun yaptım. Mesela ben bir virüs simülatörü yaptım, virüsler çok çoğalınca onu bana astılar.

Yaklaşık 500 nesne için GM'yi çektim, ardından FPS düşüyor ve fan çalışmaya başlıyor, böylece bilgisayar havaya uçuyor.

Genellikle, eğer yeni başlıyorsanız, oyunların optimizasyonu ve performansı konusunda çok fazla endişelenmemelisiniz.

Basit oyunlar yaptığınız ve herkesin güçlü bilgisayarları olduğu için çoğu zaman bunda bir sorun yaşanmaz. Ancak genel olarak ve özellikle telefonlar için oyun yaparken bu nokta göz ardı edilemez.

Şimdi sadece şunu söyleyeceğim:

  • Şeffaflıktan Kaçının
  • Büyük kartlardan kaçının
  • Adımlarda daha az işlev

Tamam, ben de öyle dedim. Peki Game Maker'da hangi efektler var ve bunları nasıl tetikleyebiliriz?

GMS'deki standart efekt türleri ve bunların nasıl çağrılacağı

3 fonksiyon mevcuttur:

  • effect_create_above(tür, x, y, boyut, renk); // OVER efektini yarat
  • effect_create_below(tür, x, y, boyut, renk); // bir POD efekti yarat
  • effect_clear // efektleri temizle ve kaldır

Neredeyse her zaman effect_create_above kullanıyorum, ancak bazen farklı bir tanesine ihtiyaç duyulabiliyor. Mesela bir nesnenin altına kan gölü çizmek daha iyidir, ama hiç böyle çizmemek daha iyidir...

tür- etki türü. Aşağıda bu konuda daha fazla bilgi bulabilirsiniz.

x, y- Bunların ne olduğu açık, koordinatlar. Efekti yarattığımız yer.

Bunun hakkında daha fazlasını burada okuyun:

boyut- boyut. Yalnızca 0, 1 ve 2 olabilir.

  • 0 - küçük
  • 1 - ortalama
  • 2 - büyük


renk- efekt rengi. Örneğin: c_red, c_blue, c_green

Temelde hepsi bu, onları çizmek çok kolay ve burada genellikle hiçbir sorun olmuyor. Genel olarak efektler görsel bir şey olduğu için burada asıl sorun görsel şeylerdir. Yani nasıl çizileceği değil, ne zaman, ne tür ve ne renk.

Görüntüleme