SFML 2'de 2d yukarıdan aşağıya oyun üzerinde çalışıyorum ve her şeyin birlikte çalışacağı ve uyumlu olacağı zarif bir yol bulmam gerekiyor.
Açıklamama izin ver. Tüm sınıflar için bir beraberlik yöntemi ve bir güncelleme yöntemi sağlayan soyut bir temel miras sınıfları bir dizi var.
Oyun döngüsünde, güncelleme çağırıyorum ve sonra her sınıfa çizim yapıyorum, bunun oldukça yaygın bir yaklaşım olduğunu hayal ediyorum. Fayans, çarpışma, oyuncu ve tüm fayans / görüntüleri / dokuları içeren bir kaynak yöneticisi için sınıfları var. Girişin SFML'de çalışma şekli nedeniyle, her sınıfın güncelleme çağrısında giriş (gerekirse) işlemeye karar verdim.
Şimdiye kadar, örneğin bir hareket tuşuna basıldığında oyuncu sınıfında gerektiğinde bağımlılıkları geçiyorum, oyuncunun gitmek istediği pozisyonun bir çarpışma olup olmadığını kontrol etmek için çarpışma sınıfında bir yöntem çağırıyorum, ve oyuncuyu sadece çarpışma yoksa hareket ettirin.
Bu çoğunlukla işe yarıyor, ama daha iyi yapılabileceğine inanıyorum, nasıl olduğundan emin değilim.
Şimdi uygulamak zorunda olduğum daha karmaşık şeyler var, örneğin: bir oyuncu yerdeki bir nesneye yürüyebilir, onu almak / yağmalamak için bir tuşa basabilir ve daha sonra envanterde görünecektir. Bu, birkaç şeyin olması gerektiği anlamına gelir:
- Oynatıcının tuşa basıldığında lootable bir öğe aralığında olup olmadığını kontrol edin, aksi takdirde devam etmeyin.
- Öğeyi bulun.
- Öğe üzerindeki hareketli grafik dokusunu varsayılan dokusundan "yağmalanan" dokuya güncelleyin.
- Öğenin çarpışmasını güncelleyin: şekli değişmiş veya tamamen kaldırılmış olabilir.
- Envanterin eklenen öğeyle güncellenmesi gerekiyor.
Her şeyi nasıl iletişim kurabilirim? Mevcut sistemimle derslerimin kapsamı dışına çıkacağım ve her yerde yöntem çağrısında bulunacağım. Tüm sınıfları büyük bir yöneticiye bağlayabilir ve her birine ana yönetici sınıfına bir referans verebilirim, ancak bu sadece biraz daha iyi görünüyor.
Herhangi bir yardım / tavsiye büyük mutluluk duyacağız! Bir şey net değilse, şeyleri genişletmekten mutluluk duyarım.