Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





A vueltas con el XML

Iniciado por SiPoX, 03 de Abril de 2010, 12:53:38 PM

« anterior - próximo »

SiPoX

Buenas!

Una duda sobre XML... :P

En varios .xml guardo la información de los niveles, de tal forma que el juego, en tiempo de ejecución, lea esos ficheros y cargue en memoria la información de cada nivel, siendo cómodo a la hora de modificar la susodicha info sin tocar código del programa.

La duda es si puedo tener esos ficheros fuera del Content, para leerlo con la funcionalidad del System.Xml. Si genero los .xml dentro del content, por lo que he leido, hay que serializar, deserializar y hacer alguna movida rara.... y si intento leerlo con el system, efectivamente me manda lejos. Y si lo saco del content, no sé como indicarle la ruta relativa para que lo lea. (al parecer no lo crea en el bin). (No sé si me explico... :P)

Es mucho sacrilegio intentar pasar del content para eso? alguna forma de hacerlo? :P

Thaanks! :P
gamevelop: punto de encuentro para la industria del videojuego

Eduardo Millán: mi perfil ;)

WaaghMan

Yo me encontré con el mismo problema hace tiempo, y lo solucioné haciendo un importador de texto plano.

Hay un documento explicándolo (más o menos) en http://www.milkstonestudios.com/2009/03/plain-xml-content-in-xna-content-pipeline/
Milkstone Studios - Autores de Avatar Ninja!, Little Racers, MotorHEAT y Wool en Xbox Live Indie Games

[EX3]

En XBox360 no queda mas cojones que usar si o si el content? No hay opcion de cargar archivos sueltos como se puede hacer en Windows desde un App.Path o similar (el directorio base del juego)?  ???

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

WaaghMan

Puedes usar paths para algunos temas, nosotros lo hacemos por ejemplo para obtener los nombres de todos los archivos de música de una carpeta y cosas así, pero para cargarlos (y empaquetarlos en la aplicación) hace falta que estén en el content pipeline.

Esto sólo se aplica a los archivos del paquete de la aplicación, lo que el juego guarde en los dispositivos son archivos normales y corrientes.
Milkstone Studios - Autores de Avatar Ninja!, Little Racers, MotorHEAT y Wool en Xbox Live Indie Games

[EX3]

En definitiva, que todos los recursos del juego solo estan accesibles desde el content pipeline, no se podria tener una  carpeta con un arbol de subcarpetas con los recursos organizados (eso he entendido). Pues vaya, entiendo que el content pipeline esta desarrollado para facilitar la tarea de gestionar los archivos del juego, pero que sea la unica opcion frente a montarte tu sistema propio, lo veo mas una limitacion que una ventaja :-\

Salu2...

P.D.: Imagino tambien que la obligacion de usar el content pipeline sera por temas de optimizacion como otras tantas cosas en la version de Xbox360 de XNA.
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

WaaghMan

Sí que es posible usar carpetas para organizar elementos del content pipeline (Y menos mal, porque todo el contenido tiene la extensión .xnb y por tanto no se permiten repetir nombres de un recurso aunque tengan tipos distintos).

Creo que el objetivo principal del content pipeline es efectivamente optimización, se compilan los recursos a un formato que pueda ser cargado rápido y eficientemente por la plataforma objetivo, por ejemplo convertir los .jpg a .dds y cosas así.

En la Xbox 360 lo veo bastante lógico y aceptable, teniendo en cuenta que siempre podemos hacernos nuestros propios importadores. En Windows, en cambio, es bastante problemático, por ejemplo es más complicado hacer un juego en el que la gente pueda añadir sus propios niveles o modelos a posteriori (de hecho, no existe función para cargar un modelo desde un archivo .X).
Milkstone Studios - Autores de Avatar Ninja!, Little Racers, MotorHEAT y Wool en Xbox Live Indie Games

Vicente

En Windows nada te impide liarte a abrir cosas con las APIs normales de .NET :p En Xbox se usa también el content pipeline por motivos de seguridad, el acceso a los recursos de la consola se limita y no puedes andar dando vueltas por el sistema de ficheros de la misma alegremente.

[EX3]

Cita de: Vicente en 05 de Abril de 2010, 02:14:42 PM
el acceso a los recursos de la consola se limita y no puedes andar dando vueltas por el sistema de ficheros de la misma alegremente.
No hablo de recorrer el disco duro de la consola como si fuera el C:\ del Windows con el usuario Administrador :P Hablo mas bien de tener capacidad para explorar libre y unicamente el directorio de TU juego, vamos, que tu raiz de directorios sea donde este almacenado tu juego. No veo ningun problema de seguridad en eso.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Vicente

Claro, pero de alguna forma tienes que controlar esa parte de exploración, la forma fácil y segura es no dejarte hacerla :p

[EX3]

Muerto el perro se acabo la rabia, ya te vale jajajajajajajaja... :P

En todos los sistemas operativos serios (guindors quizas... 0:-)) se controla todo con privilegios asignados a un usuario. No veo por que no se puede hacer lo mismo en una consola :P (de hecho se hace ya con los perfiles de usuario donde no puedes elminar o mover elementos o ejecutar versiones completas de juegos de XBLA de otro usuario, por ejemplo).

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

SiPoX

Pues ando probando el tuto.. WaaghMan!, muy curradete! je,je,je :P

Pero no entiendo bien la parte de ejemplo de uso...  ^_^' ::)

CitarOnce both projects set up (remember to add reference to XmlSourceImporter from the Content project), we can add .xml files to the content project. Under "Content importer", we'll need to select "Xml Source importer", instead of the default XNA one.

Más thanks & buen debate xD!! :P
gamevelop: punto de encuentro para la industria del videojuego

Eduardo Millán: mi perfil ;)

WaaghMan

Bueno, si estás en ese punto tendrás los dos proyectos XmlSource y XmlSourceImporter (o algo así), uno con la estructura de datos+lector y el otro con el escritor.

Lo que hay que hacer para usarlos ahora es simplemente, clic derecho en el subproyecto "Content" dentro de tu proyecto de XNA, y agregar la referencia al proyecto XmlSourceImporter.

Tras esto, cuando selecciones los archivos añadidos al proyecto de contenido (en nuestro caso los XML), te aparecerá una nueva opción en la lista de importadores llamada "Xml Source importer". La escoges y ya podrás compilarlo, y después para cargar los XML en tiempo de ejecución ya tienes el código.
Milkstone Studios - Autores de Avatar Ninja!, Little Racers, MotorHEAT y Wool en Xbox Live Indie Games

SiPoX

Buenas! :P

Probando, probando... ya parecía que tenía todo, pero... no tengo que poner un "using" en algún sitio para que use tales librerías? :P El caso es que no parece reconocer:

XmlSource xs = Content.Load<XmlSource>

:P

Más thanksss!!! ;) :P

gamevelop: punto de encuentro para la industria del videojuego

Eduardo Millán: mi perfil ;)

WaaghMan

#13
Sí, hace falta el using correspondiente, y que agreges la referencia al proyecto XmlSource donde lo vayas a usar.

(Por si no lo supieras, una vez añadida la referencia al proyecto, al hacer clic derecho en el la línea del error te saldrá un "Resolver" que será muy listo y te añadirá la referencia al principio del archivo.
Milkstone Studios - Autores de Avatar Ninja!, Little Racers, MotorHEAT y Wool en Xbox Live Indie Games

SiPoX

Hum.. bueno.. era eso, lo añadí a mano xD! y ya está todo operativo. :D :P Gracias again, suplicio done! :P
gamevelop: punto de encuentro para la industria del videojuego

Eduardo Millán: mi perfil ;)






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.