Syntra Games Günlükleri: Phaser.io ile 2D Fizik Motorunun Sınırları
Tarayıcı tabanlı oyunlar geliştirmek, performansı saniyenin onda biri seviyesinde optimize etmeyi gerektirir. Syntra Games çatısı altında 2D oyunlar inşa ederken karşılaştığım fizik motoru limitlerini, çöken blok yüklemelerini ve sonsuz döngülerde tarayıcıyı kilitlenmekten nasıl kurtardığımı bu günlükte bir araya getirdim.
⚙️ Hassas Çarpışma (Collision) Mimarisi
Atmosferik (LIMBO tarzı) macera ve platform oyunlarında fizik motorunun tepkileri oyunun kalitesini belirler. Başlangıçta oyun dünyasındaki çarpışma sınırlarını küresel (global boundaries) olarak ayarlamıştım. Ancak bu durum, karakterin sahnede karşılaştığı tüm duvarlara değdiğinde oyunu kaybetmesine yol açıyordu.
Bunun üzerine fizik konfigürasyonumu baştan aşağı değiştirerek, oyun bitirme tetikleyicilerini sadece zemin üzerindeki belirli "kırmızı kutulara" entegre ettim. Böylece duvarlara sürtünmek veya zıplamak serbest kalırken, tehlike sadece spesifik nesnelere atandı.
🚀 Sonsuz Döngü (Endless) ve Lag Çözümü
Oyun motorunu test ederken en büyük kabusu sonsuz (endless) yapıdaki bir projede yaşadım. Menü ekranı, ses dosyaları ve sonsuz üretim algoritmaları aynı HTML belgesi içinde çalışmaya çalıştığında bellek (RAM) şişiyor ve ciddi FPS dropları (lag) meydana geliyordu.
Oyun akış stratejimi radikal bir şekilde değiştirdim. index.html dosyasını yalnızca hafif bir başlatıcı ve menü ekranı olarak kurgulayıp, sonsuz döngü mekaniklerini tamamen izole edilmiş sonsuz.html dökümanına taşıdım. Bu ayırma işlemi, tarayıcının üzerindeki yükü sıfırlayarak oyunun mobil cihazlarda bile 60 FPS'e kilitlenmesini sağladı.
Geliştirme Krizi Raporları
Canvas Göçü ve Blok Kayıpları
Oyunun performansını artırmak umuduyla tüm yapıyı daha kompleks bir Canvas motoruna (engine) taşımaya çalıştım. Ancak sistem tamamen bozuldu; haritadaki bloklar renderlanmıyor ve görünmez oluyordu. Çözüm: Maceraya atılmaktan vazgeçip hemen stabil olan önceki kod sürümüne (Rollback) dönüş yaptım. Yerel DOM render sistemine geri dönüp mobil parametreleri güncelleyerek blok görünmezliği sorununu anında ortadan kaldırdım.
Performansı Düşüren Obfuscation
Oyun dosyalarını çalınmaya karşı korumak için çok ağır algoritmik şifrelemeler (obfuscation) kullanmıştım. Bu durum mobil cihazlarda oyunun başlatılmasını saniyelerce geciktirdi. Çözüm: Sistemi yavaşlatan bu ağır şifrelemeleri iptal ettim. Yerine sağ tık, kopyalama engeli ve daha temel seviyede tıklama önleme (click prevention) kısıtlamaları getirerek güvenliği performansla dengeledim.
💡 Bağımsız Geliştiricilere Tavsiyeler
- Rollback (Geri Dönüş) Yapmaktan Korkmayın: Saatlerce uğraşıp yeni bir yapı kurduğunuzda her şey bozuluyorsa, inatlaşmayın. Temiz ve stabil çalışan eski koda dönmek bazen en büyük ilerlemedir.
- Modüler Düşünün: Bir projedeki her şeyi tek bir dosyaya (index) sığdırmaya çalışmayın. Menüyü ayrı, oyun motorunu ayrı dosyalara bölmek (sonsuz.html gibi) sistemin nefes almasını sağlar.
- Performans > Karmaşıklık: Oyununuzun zorluk algoritmalarını veya güvenlik önlemlerini kurarken aşırıya kaçarsanız makine yorulur. Basit mantıklar (belirli kırmızı kutulara ölme veya basit kopyalama engelleri) her zaman en iyi sonucu verir.