Estoy haciendo un juego de rol de arriba hacia abajo para iPhone. Estoy usando tilemaps (CCTMXTileMap) y el motor cocos2d-iphone.
Hice una clase que puede manejar la carga de mapas y NPC en la pantalla, una clase que maneja la entrada y una clase que se supone que muestra un cuadro de diálogo. La clase de diálogo toma una sola cadena, o una matriz, y la muestra en pantalla dentro de un cuadro de diálogo ordenado, ocultando los controles hasta que el usuario toca en la pantalla, cuando pasa al siguiente mensaje, o si es el último / único mensaje, Oculta el diálogo.
Mis NPC están actualmente almacenados en Core Data. Sus cadenas deberán actualizarse en función del progreso de la búsqueda. Además, hay otros fragmentos de diálogo, como señales y otros mensajes.
Entonces, ¿dónde pongo el contenido textual de mi juego? No creo que Core Data sea el lugar correcto, por tres razones:
Si mis cadenas se almacenan en Core Data, probablemente me resulte más difícil traducirlas.
Si mis cadenas están en Core Data, eso solo me deja con cadenas para NPC (que se adjuntarían a los NPC en Core Data). ¿Dónde deja eso todo lo demás?
Si dejo mis cadenas en Core Data, es un poco pesado en las operaciones de carga, ¿no?
Dada toda esta información de fondo, ¿dónde pongo mis cadenas y diálogo en mi juego?
tl; dr
¿Cuál es una manera eficiente de almacenar cadenas para un juego de iOS para que se pueda acceder a ellas, traducirlas y consultarlas fácilmente en varias partes del juego?
Respuestas:
A menos que tenga algunos requisitos particulares de portabilidad, formato o velocidad, los recursos de cadena estándar de Apple deberían estar bien.
fuente
NSLocalizedString
funciona bien A menos que desee almacenar árboles de diálogo completos, es posible que necesite un formato que admita este tipo de estructura.string #8
, ostrings(8)
, o[strings objectAtIndex:8];
?Crearía un archivo externo o archivos para todas las cadenas. luego cárguelo una vez cuando el programa comience en algún objeto global. en tiempo de ejecución, cada objeto que necesite mostrar alguna cadena tendrá que pedirle a ese objeto global la cadena adecuada. puede usar claves para cada cadena o puede usar una matriz. Si no le gusta la idea del objeto global, puede cargar cada cadena siempre que lo necesite directamente desde el archivo, pero eso puede causar bajos fps al cargar diálogos. Con este enfoque, puede cambiar fácilmente el idioma cuando lo desee, solo debe comenzar a leer desde un archivo diferente.
fuente