Bir 2D oyun geliştiriyorum ve çok fazla sprite var. 2D'ye dönüştürmek için 3D animasyonlar ve modeller kullandım ve onlara "Fallout" ya da "Diablo" ifadelerini gördüm. Elle çizmekten daha kolaydır, lol.
Çerçeveyi 15 fps'ye kadar kesmek zorunda kaldım, bu da onlara dalgalı bir görünüm vermeden düşebileceğim en düşük seviyeydi. Ancak, 24 karenin inanılmaz derecede pürüzsüz görünmesinden dolayı üzgündü.
Bunu yapmamın iki nedeni var:
1) HDD alanını azaltın. Görüntüler ne kadar az olursa, toplam oyunum o kadar küçük olacaktır.
2) RAM tüketimini azaltın. Yüklenecek görüntü sayısı ne kadar az olursa, RAM sınırlamamı şişkinlikten kaçınmam daha olasıdır.
Ancak, hem HDD alanında hem de RAM'de görüntüleri sıkıştırmanın bir yolu olsaydı, bunu yapardım. Daha önce test ettim ve çoğu RGBA8888'den RGBA5555'e verirken kalitede herhangi bir değişiklik almıyor ve TexturePacker programımda RGBA4444'e dönüştürürken sadece küçük bir hit. Şu anda bunu yapmıyorum, çünkü SFML, hangi tip .PNG görüntüsüne bakılmaksızın aynı miktarda bellek kullanıyor gibi görünüyor. Nasıl farklı yükleneceğini araştırdım, ancak konuyla ilgili bir şey bulamadım.
2D video oyunlarının nasıl ele alınacağı hakkında çok şey okudum. Fikir birliği ezici: Mükemmel performans için Spritelarınızı Daha Büyük Bir Dokuya Paketleyin! Bu yüzden küçük spritelarımı TexturePacker kullanarak çok daha büyük bir sprite sayfasına paketledim.
Ancak, karakter başına 10-15 animasyon, hareket etmek için 5 yön ve animasyon başına 15-40 kare (muhtemelen ortalama 24) olmasını planlıyorum. 15 animasyon, 5 yön ve animasyon başına ortalama 24 kare ile; Bu karakter başına 1800 ayrı karedir. Sprite sayfasına yerleştirilmişse, bunun yerine yalnızca 75 resim olur. (Her Yön için Animasyon başına bir hareketli grafik sayfası. 15 * 5)
Oyundaki en büyük patron karakteri için spritesheet kullanamıyorum ve her seferinde tek bir görüntü yüklemek için bir yol programlamak zorundayım. Bunu henüz performans için yapıp yapamayacağımı bilmiyorum.
Karakterler için, bunları bir spritesheet'te zaten paketledim. Yürürken tek bir karakter için, bazen dursa da, çoğu zaman işe yarıyor gibi görünüyor. Ancak, bu karakter için tüm dokuları önceden yüklemek yerine dokuları değiştiren kötü tasarlanmış koduma bağlıyorum.
Dokular önceden yüklenecek olsaydı, sprite sayfaları için mantıklı. Her karakter için 1800 küçük resim önceden yüklemenin kötü bir fikir olduğunu hayal edebiliyorum.
Ancak, onları bir kerede bir bellek içine ve dışına aktarmak son derece hızlı olacağını düşünüyorum, bu yüzden bir seferde sadece tek bir görüntü bellek gerekir. Bu, herhangi bir anda her karakterin 45 + MB yerine yalnızca birkaç KB tüketeceği anlamına gelmez mi?
Akışın inanılmaz derecede hızlı olması gerektiğinden (saniyede 15 görüntünün bellek ve işleme girip çıkması gerektiğinden) performansımı öldüreceğini düşünüyorum ve görüntüler çok küçük olsa da, karakter sprite sayfaları yüklemek daha iyi bir fikir olabilir yerine hafızaya. Ama yine de daha büyük patron karakterim için tek görüntü akışı benzeri bir render sistemi kodlamak zorunda kalacak.
Deniyorum ama basit bir süreç değil. Özellikle oyun motorunun şu anda grafiklerle ilgilenmeyen diğer kısımları üzerinde çalıştığım göz önüne alındığında.