2010-02-17 3 views
20

Estoy creando un juego usando el puerto del motor de gráficos irrlicht C++ 3D para la plataforma Android. El motor de gráficos está escrito en C++. Necesito poder cargar mallas y texturas, etc. desde código C++. Mi plan actual es colocar todos los archivos de activos del juego en el directorio res/raw o en el directorio assets, y al inicio copiar estos archivos en la tarjeta sd para que sean accesibles desde el código irrlicht C++. ¿Es esta la mejor manera de hacer que los archivos multimedia del juego sean accesibles desde C++?Android: Cómo hacer que los archivos de elementos del juego sean legibles desde código C++ usando ndk

Respuesta

9

Hay varias formas de hacerlo ... cada una tiene sus propias limitaciones, por lo que no puedo dar una buena recomendación sin saber más acerca de su situación. Aquí hay algunos enlaces a las discusiones con algunos consejos que pueden ayudarle a cabo:

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

que le puede dar sugerencias más específicas si supiera a) ¿Cuántos recursos que necesitaba para acceder b) El tamaño del recurso más grande que encontrará, más específicamente, son todos sus recursos < 1 MB de tamaño sin comprimir?

+0

Esos son buenos hilos que no encontré antes. Aquí hay otro que encontré útil http://thedevelopersinfo.com/2010/01/13/working-with-sdcards-filesystem-in-android/ El juego aún no está bien definido, pero aquí hay algunos appoximations de archivos lo haré necesita acceder desde C++ aproximadamente 8 mallas de aproximadamente 400k tamaño (3.2MB) aproximadamente 8 texturas de aproximadamente 50k tamaño (0.4MB) aproximadamente 20 texturas de aproximadamente 20k tamaño (0.4MB) 1 textura de 193K (0.193MB) Total aproximado 4.2MB También un video 249K y algunos efectos de sonido 306K pero estarán en la carpeta res/raw y reproducidos en el reproductor multimedia android – slytron

+1

Bien, la razón por la que pregunto es que parece que hay un tamaño de archivo descomprimido de 1MB limite PER PEROURCE y también parece haber un recuento máximo de recursos de 512. Ya que parece que no está En ambos casos, puede poner todos sus recursos en la carpeta "/ assets" y luego acceder a ellos utilizando la clase AssetManager. Si su APK tiene zipaligned, el AssetManager corregirá los archivos por usted, lo que supondrá una gran mejora de velocidad. – cjserio

+0

gracias. Creo que tengo lo que necesito hacer. – slytron

1

En teoría, puede pasar el InputStream al código nativo de C++ y hacer que invoque sus métodos. Incluso puedes implementar un istream encima de esos. Sin embargo, no creo que esto es lo que buscas.

Tenga en cuenta que los archivos de activos en el APK no se almacenan como, bueno, archivos. Están comprimidos y archivados: un APK es en realidad un archivo ZIP renombrado. Así que recomendaría copiar el activo en una carpeta de datos desde Java, y luego pasar el nombre de archivo de esa copia a C++.

Esto, por cierto, descarta por completo la escritura de esos activos.

Cuestiones relacionadas