C # ile bir video oyunu tasarlarken bu soru ile karşılaştım.
Battlefield veya Call of Duty gibi oyunları göz önüne alırsak , aynı anda yüzlerce hatta binlerce mermi uçuyor. Olaylar sürekli olarak tetiklenir ve bildiğim kadarıyla, bu çok fazla işlem gücünü emer… ya da öyle mi? Çeşitli oyun geliştiricilerin (2B ve 3B) mermileri nasıl yönettiğini ve her biri için en verimli yöntemin ne olduğunu bilmek istiyorum.
Soruyu okudum Video oyunlarında mermiler nasıl taklit edilir? ancak mermilerin program tasarımı açısından nasıl çalıştığına değinmez.
Birkaç fikrim vardı, ama her birinin dezavantajı var:
Düşünebildiğim en verimli yöntem (2D oyunlar için):
Diyelim ki Bullet adında bir sınıf oluşturacağımı ve kullanıcının bir düğmeyi basılı tuttuğunu ancak her 0.01 saniyede bir Bullet nesnesi yapılacağını söyleyin. Bu Kurşun:
1 Hız
2 Vurulduğu yerden başlama
3 Sprite dokusu
4 Bir vuruş etkisi
Madde işareti kendi sınıfı olacağından çizim, hareket ve eylem dinleyicilerinin kendisini yönetebilirdi.
İşlemcide, bu nesnelerin binlerce örneğinin başlatılmasının ardından imha edilmesinin (isabet etkisi tetiklendiğinde) işlemesi zor olmaz mıydı? RAM alanı?
3D oyunlar için verimli yöntem - Sahip olduğum bir başka düşünce ise:
Bir silah sınıfı oluşturduğumu varsayalım. Bu silahın, bazıları:
1 Silahın nerede hedef aldığını tespit edin ve bir hedefe mi bakıyor olduğunu belirleyin
2 Silah atış animasyonunu tetikleyin
3 Silahın işaret ettiği yerden sağlık çıkarmak için bir şey gösteren bir doDamage () yöntemi vardır
4 Düğmeye basıldığında bir madde imi animasyon sınıfını bildirir
Daha sonra statik bir sınıf oluşturabilirim, BulletAnimation, tetikleyen silahın nerede olduğunu, silahın nereye (mermi varış yeri için) gösterildiğini ve mermi için kullanılacak uygun bir sprite ve hız hakkında bilgi alabileceğini söyleyebilirim. . Bu sınıf daha sonra, bir mermi silahtan atılan bir mermiyi simüle etmek için hem pozisyonlara hem de istenen sprite dayalı olarak sprite'lar (yeni bir iplikte belki idk) çizer.
İkincisi kodlamak çok daha zor görünüyor ve bir seferinde binlerce mermi için sürekli olarak bunu yapmak için statik olarak adlandırmak çok fazla işlem gücü gerektirmiyor mu? Hem başlangıç hem de bitiş konumlarında sürekli güncellemeler almak da zor olacaktır.
Sorum şu ki, oyun yaratıcılarının bunu yapmanın en etkili yolu nedir? Bu yöntem 2D'den 3D oyunlara değişiyor mu?
pew-pew-pew
teknoloji yoluyla çalışır :)