2010-02-17 26 views
20

kullanarak C++ kodundan okunabilir oyun varlık dosyaları nasıl yapılır Android platformu için irrlicht C++ 3D grafik motoru bağlantı noktasını kullanarak bir oyun oluşturuyorum. Grafik motoru C++ ile yazılmıştır. C++ kodundan kafes ve doku vb. Yükleyebilmem gerekir. Şu anki planım, tüm oyun varlık dosyalarını yeniden/raw dizinine veya varlıklar dizinine yerleştirmek, daha sonra bu dosyaları sdcard'a kopyalamak ve böylece irrlicht C++ kodundan erişilebilmektir. Oyun medya dosyalarını C++ 'dan erişilebilir hale getirmenin en iyi yolu bu mu?Android: ndk

cevap

9

Bunu yapmanın birkaç yolu vardır ... her birinin kendi sınırlamaları vardır, bu yüzden durumunuz hakkında daha fazla bilgi sahibi olmadan iyi bir öneri veremiyorum. İşte size yardımcı olabilecek bazı tavsiyeler ile tartışmalara bazı bağlantılar: i b erişmek için gerekli kaç kaynaklar) bir bilselerdi

http://groups.google.com/group/android-ndk/browse_thread/thread/842ca9d7d82995b0

http://groups.google.com/group/android-ndk/browse_thread/thread/4e25a5dfd46f8fea/1269bcd10bdb066d?lnk=gst&q=apk+compressed#1269bcd10bdb066d

Sana daha spesifik öneriler verebilir) Karşılaşacağınız en büyük kaynağın boyutu, daha spesifik olarak, sıkıştırılmamış boyutta < 1MB kaynağınız mı?

+0

Bunlar daha önce bulamadığım güzel konular. Burada başka bir yararlı olduğunu öğrendim http://thedevelopersinfo.com/2010/01/13/working-with-sdcards-filesystem-in-android/ Oyun henüz iyi tanımlanmamış ama burada yapacağım bazı dosyalar C++ yaklaşık 400k boyutunda yaklaşık 8 kafes (3.2MB) yaklaşık 50k boyutunda yaklaşık 8 doku (0.4MB) yaklaşık 20k boyutunda 20 doku (0.4MB) 1 doku 193K (0.193MB) Toplam yaklaşık 4.2MB Ayrıca bir video 249K ve bazı ses efektleri 306K ama bunlar res/raw klasöründe olacak ve android media player'da çalınıyor – slytron

+1

Tamam, sormamın nedeni 1MB sıkıştırılmamış bir dosya boyutu olduğu görülüyor KAYNAK PERFORMANSI ve 512 maksimum kaynak sayısı da var gibi görünüyor. Bunların her ikisini de, tüm kaynaklarınızı "/ assets" klasörüne koyabilir ve daha sonra AssetManager sınıfını kullanarak bunlara erişebilirsiniz. APK, zipaligned ise, AssetManager sizin için dosyaları büyük bir hız artışı olacak şekilde hafızaya alacaktır. – cjserio

+0

teşekkürler. Yapmam gerekeni yaptığına inanıyorum. – slytron

1

Teoride, InputStream öğesini yerel C++ koduna geçirebilir ve yöntemlerini çağırmasını sağlayabilirsiniz. Bunların üstüne bir istream bile uygulayabilirsiniz. Ancak, bunun peşinde olduğunuzu düşünmüyorum.

APK'daki varlık dosyalarının, dosyalar gibi saklanmadığını unutmayın. Sıkıştırılmış ve arşivlenmişler - bir APK aslında yeniden adlandırılmış bir ZIP dosyasıdır. Bu nedenle, varlığın Java içinden bir veri klasörüne kopyalanmasını ve bu kopyanın dosya adını C++ 'ya geçirmenizi tavsiye ederim.

Bu, bu arada, bu varlıklara yazmayı tamamen devre dışı bırakır.