Event'ların İşlenme Sırası






Bu blog yazımızda, GameMaker'daki event'ların çalıştırılma sıralarını inceleyeceğiz.



Peki bunu bilmek ne işe mi yarayacak ? Bu bazı variable tanımlama kaynaklı "Not set before reading it" hatalarından kurtulmanızı sağlayabilir, ya da mesela birbirini takip eden iki obje istiyorsunuz, biri zaten hareket ediyordur ve hareket kodları step event'tadır, diğerinin step eventine de :

x = obj_test.x;
y = obj_test.y;

yaparsanız, takip eden objenin, hareket edeni birazcık gecikmeli takip ettiğini görebilirsiniz. Çünkü ikisinde de kodlar step event'ta. Yani bazı durumlarda takip edecek objenin kodu önce çalıştırılıp, ondan sonra hareket eden objenin hareket kodları çalıştırılabilir, ve bu yüzden de obje hareket ettikten bir kare sonra takipçi obje ancak son durumuna güncellenebilir ve bu da gecikmeye sebep olur. Bu yüzden bu durumda hareketin önce, takibin sonra işlenmesi için, hareket kodu step event'ta ise, takip kodları end step event'a yazılmalıdır.



Önemli Not :

Event'ların işlenme sırası, farklı platformlar ve runtime'lara göre değişiklik gösterebilmektedir. Burada verilen sıralama genel anlamda bir ortalamadır ve %95 doğruluk payı içerir.



Event'ların İşlenme Sırası


Instance Variables
Create Event
Instance Creation Code
Game Start Event
Room Creation Code
Destroy Event / Clean Up Event
Step Events
        ├ Begin Step Event
        Alarm Events
        Keyboard Events
                         └ Pressed, Down, Release
        Mouse Events
        ├ Step Event
        Collision Event
        └ End Step Event
Other Events
Draw Events
        ├ Pre Draw Event
        ├ Draw Begin Event
        ├ Draw Event
        ├ Draw End Event
        ├ Post Draw Event
        ├ Draw GUI Begin Event
        ├ Draw GUI Event
        └ Draw GUI End Event
Animation End Event
Asynchronous Events
    


Not : Gesture'nin tam yerinden emin değilim, ancak Keyboard'ın bi üstü, Mouse'un bi altı, ya da o aralıktaki bi sırada işleniyor.




Önemli Not :

Bu sıralama her koşulda doğru olmayabilir !
Gamemaker'da event'lar her karede belli bir sıraya göre işler ve bu işleyiş her objeye özel değişiklik göstermez. Kısacası şu anda bir objenin Step Event'i çalıştırılıyorsa, diğer bütün objelerde de Step Event çalışıyordur.
Bu durumda, örneğin obj_weapon objesinin Step Eventinde, instance_create_layer fonksiyonunu kullanarak obj_bullet objesini oluşturuyorsanız, obj_bullet objesi tam olarak Step Event esnasında oluşturulduğu için, ilk seferinde normal Event sıralamasına göre gitmez, oluşturulduğu anda sıralamanın neresinde ise oradan başlar ve devam eder. Mesela obj_bullet objesi, ilk oluştuğunda Begin Step Event'i çalışmaz ancak End Step Event'i çalışır. Bu yalnızca oluştuğu ilk frame için geçerli bir durumdur.
Create Event ise bir istisnadır. Obje ne zaman oluşturulursa oluşturulsun, Create Event tam olarak objenin oluştuğu anda o objeye özel olarak yine bir kez çalıştırılmaya devam eder.




52 görüntüleme0 yorum

İlgili Yazılar

Hepsini Gör
GameMaker
       Türkiye
  • Facebook
  • Twitter
  • YouTube
  • Discord
GameMaker Turkey is not affiliated and associated with YoYo Games Ltd.
GameMaker, GameMaker Studio,  GML, GMS and YoYo Games names and logos are trademarks of YoYo Games Ltd.
Designed by Furkan Karabudak