2016-03-28 13 views
1

Bu konunun zaten hazırlandığını biliyorum, ancak sayfadan hiçbir zaman bir şey elde edemedim. Cevabımın bir ipucu, GIF'in çerçevelerinin her birine ayrılması gerektiğiydi, ama nasıl? Bununla birlikte bazı kodlar çok takdir edilecektir. Çok teşekkürler.C++ SDL2 | SDL2'de nasıl GIF oynarım?

+0

Oyununuzda bazı animasyonları oynatmanız mı gerekiyor? Ya da GIF ve sadece GIF'e ihtiyacınız var? – HolyBlackCat

+0

Kutsal Kara Kediye, Ne yapmayı planladığım bir video cutscene benzeyen bir efekt oluşturmak için bir ses dosyası ile birlikte bir GIF dosyası kullanmaktır. Evet, bunun çok garip geldiğinin farkındayım, ama bir gün oyunumla dalga geçiyordum ve ben böyle yapabilseydim ne olurdu? Spritetoitleri temel animasyon için nasıl kullanacağımı biliyorum, bu yüzden yardıma ihtiyacım yok. SDL'de bazı diğer kütüphanelerle birlikte video oynatabileceğinizi biliyorum, ancak bunlar SDL1 kullanıyor. Ayrıca, bahsetmeyi unuttum, GIF dosyasını bir GIF dosyasındaki tüm karelerle oynatmak mümkün olabilir mi? –

+0

Oyunlarda GIF kullanmamıştım, ancak şunu buldum: http://stackoverflow.com/questions/22708336/reading-animated-gifs-sdl-2 Yorumlardaki bazı kişiler 'libungif' kullanabileceğinizi söylüyor. gif yükleme için giflib. Onları dene. – HolyBlackCat

cevap

2

Gif animasyonlarını okumak için GIFLIB'u kullanın. GIFLIB, tüm dosyayı, daha sonra çerçevelerinizi kolayca alabileceğiniz yapılara okuyan kullanışlı bir "slurp" işlevi sunar. Bir gif çerçevesinden bir SDL_Texture inşa ederken bir süre oldu ama IIRC her piksel için bir paletinden renkleri bakmak gerekir. Giflerin sabit bir kare hızına sahip olmadığından, her bir çerçeve için ayrı gecikme sürelerini de kaydetmeniz gerekir. GIF dosya formatının ayrıntılı bir açıklaması için this'u okuyun ve GIFLIB'i anlamlandırmanıza yardımcı olacaktır.

Bu, cutscenes (ve diğer pek çok şey) için clunky GIF formatını kullanmamaya öneriyoruz çünkü oldukça aç bir alan ve sesinizi güzelce senkronize etmede sorun yaşayabilirsiniz. "Gerçek" video formatlarını oynatmanın bir yolunu aramamızı tavsiye ederim - this project'a bir göz atın.

+0

Çok teşekkürler! Bu gerçekten bana yardımcı oldu! –