locked
Menú en XNA RRS feed

  • Pregunta

  • Buenos días a todos. Es mi primera vez por aquí, pero espero que no sea la última.

    Estoy haciendo un cuento interactivo para niños con discapacidad en XNA y me ha surgido el siguiente problema. Como soy una principiante en esto de XNA ando un poco perdida.

    Tengo por un lado el proyecto con mi cuento y por otro lado otro proyecto con mi menú de opciones (Cuento del pastor, Cuento del patito, Cuentos, Salir....) Lo mucho que he conseguido es realizar la opción de salir, pero la acción para que me salga el cuento del pastor por ejemplo no sé cómo es. Me explico, al tener el menú y el cuento en proyectos distintos, no sé cómo ligarlos para que al darle a la opción del cuento me salte éste. O si por el contrario todo estuviese en un mismo proyecto, tanto el cuento como el GameComponente del menú tampoco sabría como ligarlos ni cómo hacer que primero me salga el menú en vez de el cuento.

    Un saludo y espero haber explicado mi duda con claridad.

    Gracias a todos!!

    domingo, 18 de marzo de 2012 11:44

Respuestas

  • lastimosamente no te puedo ayudar con lo del tutorial, pues yo también me encuentro en varios proyectos al tiempo. prácticamente todos los libros de XNA que puedes comprar en Amazon hacen uso del GameState, asi que ellos te demostraran como hacerlo. y en cuanto a lo del paso a paso, no conozco ninguno, ya que esas son decisiones del programador, lo que si te puedo recomendar es que comiences a hacer el juego y veras que cuando ya sientas mas confianza con la creación de juegos te llegaran ideas sobre como implementarlos.
    • Propuesto como respuesta jhonK jueves, 22 de marzo de 2012 13:06
    • Marcado como respuesta Vicente CartasModerator jueves, 22 de marzo de 2012 15:19
    jueves, 22 de marzo de 2012 1:50

Todas las respuestas

  • hola, lo que preguntas es uno de los conceptos de la creación de videojuegos y se llama gamestates o estados del juego, es algo fácil una vez que lo comprendes:

    en un juego sencillo puedes poner 2 estados, el menu principal y el juego, aunque también puedes indicar que el menú de configuración es otro estado o que si tienes dos modos de juego, por decir algo un arcade y otro tipo survivor cada uno son estados diferentes. la idea radica en que cada uno de esos estados es independiente, actúa diferente y tiene cosas diferentes.

    pero como los programo?

    básicamente un estado es un juego, lo mismo que llevas en un Game, pero no puede ser un game, ya que el game crea demasiadas cosas e incluso las ventanas, entonces el truco mas sencillo es crear una interface o clase abstracta en la cual incluiremos las funciones mas basicas (Update y Draw), y en nuestro juego crearemos una variable del tipo de esta clase simplemente le diremos que siempre la dibuje y que llame al update de esa variable.

    como hacer la transición?

    lo mejor seria que cada estado (hijo de esa clase o una clase que utiliza la interface) tuviese una referencia al juego, entonces por decir algo, estas en el menú y quieres ir al juego, en el evento encargado de eso creas una nueva instancia del estado del juego (que no es hijo de game, sino que es hijo de nuestra clase estado) y una vez creada vas al juego y cambias la variable que siempre se esta dibujando y actualizando, de esta forma deja de utilizar al menu y pasa a siempre utilizar al estado del juego.

    espero haberme echo entender, si necesitas una idea del código solo dilo.

    domingo, 18 de marzo de 2012 23:56
  • hola mira yo también tengo el mismo problema  ya que no soy un experto en la programación y empecé relativamente hace poco con xna me gustaría que a mi si me dieras una mano con el código.

    mira estoy desarrollando un juego y deseo implementarle su respectivo menú (ya que no he
    encontrado material con esto).
    y además que el juego tuviera niveles , por ejemplo  que luego de cumplir dicha misión o completar cierta cantidad de puntos pase al siguiente nivel, pero que este nivel 2 tenga un entorno total mente diferente ¿qué tendría que hacer? también implementar una clase que se llame nivel y crear nuevas instancias de este.

    de antemano agradezco con todo lo que me puedas ayudar    


    miércoles, 21 de marzo de 2012 1:37
  • este es un boceto sobre como implementar las dos clases, en el metodo draw y update del estado iria el codigo que iria usualmente en ese estado del juego y que por lo general ponemos en el main. por ejemplo si es un menu, iria las comprobaciones sobre un touch o un click, pero en un estado de juego serian las tecla o algo.

    clase game:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Graphics;
    namespace demoXNA
    {
        class GameEstado:Game
        {
            GraphicsDeviceManager graphics;
            SpriteBatch spriteBatch;
            public Estado estadoActual;
    
            public GameEstado()
            {
                graphics = new GraphicsDeviceManager(this);
                Content.RootDirectory = "Content";
                
            }
    
            protected override void Draw(GameTime gameTime)
            {
                spriteBatch.Begin();
                estadoActual.Draw(spriteBatch);
                spriteBatch.End();
                base.Draw(gameTime);
            }
    
            protected override void Update(GameTime gameTime)
            {
                estadoActual.Update(gameTime);
                base.Update(gameTime);
            }
        }
    }

    clase estado:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    
    namespace demoXNA
    {
        class Estado
        {
            private GameEstado ge;
            public Estado(GameEstado _ge) {
                ge = _ge;
                
            }
    
            public void show(){
                ge.estadoActual = this;  
            }
    
            public void Draw(SpriteBatch sb) { }
    
            public void Update(GameTime gt) {
               
            }
        }
    }
    

    por ejemplo, si lo que deseas es hacer un menu y un juego, creas de subclases de la clase estado, una para el menu y otra para el juego. en la del menu hace las comprobaciones y etc. si decides que hay que iniciar el juego, solo creas una instancia de la clase del juego y luego llamas a show, eso hara que cambie y sea la que se dibuja.... es importante inicializar la variable estadoactual con una instancia. por lo general el menu inicial. en cuanto a lo de los niveles... puedes hacer uso del concepto de inicializar. por decir algo puedes pasarle un objeto o archivo que contenga las referencias de cada nivel y la misma clase las lea y cree el entorno. eso ya depende mas de como tengas pensado implementar tu juego.

    miércoles, 21 de marzo de 2012 3:30
  • hola te agradezco mucho la respuesta a pesar que parezca bastante simple no me queda bastante claro.

    espero que me puedas aclarar las siguientes dudas que tengo

    ¿cuándo cree un nuevo proyecto remplazo la clase GAME1 que se crea por default en los proyectos, o lo remplazo por la clase GameEsatdo?

    ¿o simplemente implemento una nueva clase que se llamara GameEstado?

    ¿en la clase GameEstado cargare las texturas, sonido, el jugador con su respetiva codificación? o esto lo implemento en la clase estado.

    mira puede que sea bastante fácil para muchos, te agradecería mucho si pudieses responder
    estas dudas que tengo



    miércoles, 21 de marzo de 2012 17:45
  • hola te agradezco mucho la respuesta a pesar que parezca bastante simple no me queda bastante claro.

    espero que me puedas aclarar las siguientes dudas que tengo

    ¿cuándo cree un nuevo proyecto remplazo la clase GAME1 que se crea por default en los proyectos, o lo remplazo por la clase GameEsatdo?

    ¿o simplemente implemento una nueva clase que se llamara GameEstado?

    ¿en la clase GameEstado cargare las texturas, sonido, el jugador con su respetiva codificación? o esto lo implemento en la clase estado.

    mira puede que sea bastante fácil para muchos, te agradecería mucho si pudieses responder
    estas dudas que tengo



    miércoles, 21 de marzo de 2012 17:45
  • hola, las preguntas que tienes dependen mas de como quieras diseñar tu juego. la clase GameEstado seria la base para nuestro juego. tienes dos opciones,  eliminar el Game1 y en program crear la instancia del gameEstado, o hacer que Game1 haga lo mismo que hace gameEstado.

    lo de donde cargar las cosas, depende tambien de como tengas pensado implementar el juego. si haces la carga al comienzo de todo se demorara mucho mas en abrir, pero si lo haces en al inizializar cada Estado puede llegar a pasar que el juego se congele si hay muchas cosas por cargar, en el caso de que eso suceda se puede solucionar con el famoso loading screen. yo en todos mis juegos he utilizado el segundo, ya que cargar todo al comienzo de juego aparte de ser poco util en memoria puede generar problemas con la misma.
    miércoles, 21 de marzo de 2012 23:04


  • Hola gracias nuevamente por tu respuesta pero me quedan
    partes sin entender no me podrías recomendar un tutorial sobre cómo hacer el
    juego por niveles y su respectivo menú ya que solo encuentro lo básico en la
    web o será que tú podrías realizar un paso a paso para poder solucionar mis
    problemas.



    De antemano gracias.


    jueves, 22 de marzo de 2012 0:31
  • lastimosamente no te puedo ayudar con lo del tutorial, pues yo también me encuentro en varios proyectos al tiempo. prácticamente todos los libros de XNA que puedes comprar en Amazon hacen uso del GameState, asi que ellos te demostraran como hacerlo. y en cuanto a lo del paso a paso, no conozco ninguno, ya que esas son decisiones del programador, lo que si te puedo recomendar es que comiences a hacer el juego y veras que cuando ya sientas mas confianza con la creación de juegos te llegaran ideas sobre como implementarlos.
    • Propuesto como respuesta jhonK jueves, 22 de marzo de 2012 13:06
    • Marcado como respuesta Vicente CartasModerator jueves, 22 de marzo de 2012 15:19
    jueves, 22 de marzo de 2012 1:50
  • hola después de una búsqueda exhaustiva encontré lo que necesitada por la web les dejo el link
    para los que estén interesados.

    http://www.xnadevelopment.com/tutorials/thestateofthings/thestateofthings.shtml


    • Propuesto como respuesta Escorpion15 jueves, 22 de marzo de 2012 16:43
    jueves, 22 de marzo de 2012 14:54