Gracias Gracias:  11
Página 2 de 5 PrimerPrimer 12345 ÚltimoÚltimo
Resultados 16 al 30 de 62

Tema: Proyecto fin de carrera XNa

  1. #16
    Relojero 3D Avatar de kiko_L
    Fecha de ingreso
    Dec 2005
    Ubicación
    Pamplona
    Mensajes
    1,819

    Respuesta: Proyecto fin de carrera. XNA

    Gracias a todos. Yo que ando metido en los dos mundos (3D y programación) os digo que requiere mucha menos paciencia la programación xD. Otra cosa es que al ser menos visual pueda dar mucha más pereza. Pero la gracia del XNA es que podéis combinar ambos mundos.

    Animo a todos y muchas gracias!

  2. #17
    Relojero 3D Avatar de kiko_L
    Fecha de ingreso
    Dec 2005
    Ubicación
    Pamplona
    Mensajes
    1,819

    Respuesta: Proyecto fin de carrera. XNA

    Hola a todos, hoy os voy a explicar algún avance que he hecho. Por fin me ha llegado el receptor bluetooth directamente de china! (1,5€ y sin gastos de envío)

    Llevo toda la tarde peleandome con la librería de la Wii pero por fin he conseguido que funcione!! El problema es que el mando parece que esta sin calibrar y tiembla bastante para todos los lados, pero he conseguido mover una imagen en 2D por la pantalla. Cuando avance un poco más en las lecciones me meteré con el tema de la Wii.

    Saludos!!

  3. #18
    Relojero 3D Avatar de kiko_L
    Fecha de ingreso
    Dec 2005
    Ubicación
    Pamplona
    Mensajes
    1,819

    Respuesta: Proyecto fin de carrera. XNA

    Creo que deberíamos empezar por el 2D antes de pasar al 3D. Por ello en estos días iré subiendo y explicando el código para hacer un Pong sencillo:

    Para ello vamos a empezar con el programa que creamos (MiPrimerProgramaXNA)

    Antes de empezar a programar debemos crear nuestros elementos gráficos. Para ello voy a crear una imagen que hará de escenario y otras dos que haran de jugadores. También crearemos la pelota.

    Una vez creadas las cargamos de la siguiente forma:

    En el explorador de soluciones (ver imagen 5) hacemos botón derecho en Content y añadimos una nueva carpeta, por ejemplo imágenes. A continuación hacemos clik derecho sobre dicha carpeta y añadimos un elemento existente. Seleccionamos las imágenes a cargar (jugadores, etc.) y aceptamos. Veremos que se han cargado todas las imágenes que vamos a utilizar.

    Mañana prometo seguir con el ejemplo.

    Saludos!
    Miniaturas adjuntadas Miniaturas adjuntadas Proyecto fin de carrera  XNa-escenario.png   Proyecto fin de carrera  XNa-leccion2_1.jpg  
    Imágenes adjuntadas Imágenes adjuntadas Proyecto fin de carrera  XNa-jugador-1.png Proyecto fin de carrera  XNa-jugador-2.png Proyecto fin de carrera  XNa-pelota.png 

  4. #19
    Senior Member Avatar de Sadyk
    Fecha de ingreso
    Jun 2008
    Ubicación
    madrid
    Mensajes
    517

    Respuesta: Proyecto fin de carrera. XNA

    muy wapo el tutorial, sigue, sigue
    ¡Pero no te olvides de tu juego!
    DICEN que tras la muerte está la vida eterna. Yo prefiero ensañarme con el cuerpo.

  5. #20
    Senior Member Avatar de iherrero20
    Fecha de ingreso
    Oct 2008
    Ubicación
    Toledo (España)
    Mensajes
    3,078

    Respuesta: Proyecto fin de carrera. XNA

    Muy interesante Kiko, la programación es un escollo que quiero superar, tengo bastantes nociones, pero siempre hay tiempo para aprender.
    Si vives mirando hacia el sol, no verás las sombras. (Helen Séller)

  6. #21
    Senior Member Avatar de Xtreme637
    Fecha de ingreso
    Apr 2003
    Ubicación
    Madrid
    Mensajes
    183

    Respuesta: Proyecto fin de carrera. XNA

    Grandisima iniciativa kiko_L . Seguiré este hilo muy de cerca!!!

    Un saludo
    ¿¿¿Estudias o trabajas??? Mmmmm digamos..... que mato el tiempo
    www.aestesanti.es

  7. #22
    Ninja Fever Avatar de Mars Attacks
    Fecha de ingreso
    Jun 2003
    Ubicación
    Castellón
    Mensajes
    12,744

    Respuesta: Proyecto fin de carrera. XNA

    Un hilo interesantísimo. Como petición personal, no escatimes en poner enlaces a referencias donde tú mismo hayas ido a consultar información (cómo usar el mando de la Wii en el PC, por ejemplo).

  8. #23
    el último en reirse Avatar de franchute25
    Fecha de ingreso
    Mar 2008
    Ubicación
    Sevilla
    Mensajes
    842

    Respuesta: Proyecto fin de carrera. XNA

    ese tío ahí, dándole caña, que guapo las cositas que haces tío

  9. #24
    Relojero 3D Avatar de kiko_L
    Fecha de ingreso
    Dec 2005
    Ubicación
    Pamplona
    Mensajes
    1,819

    Respuesta: Proyecto fin de carrera. XNA

    Gracias a todos por los comentarios.

    Mars, tienes razón. Iré poniendo enlaces a las páginas que consulto.

    Pero primero voy a seguir con el Pong que este fin de semana no he podido hacer nada.

    En Internet hay bastantes ejemplos de como implementar un pong en XNA pero yo voy a utilizar mi propio método.

    Antes de ponerse a programar y después de tener los elementos que saldrán en nuestra pantalla vamos a pensar un poco la estructura de nuestro programa.

    La famosa frase de divide y venceras tiene su máxima expresión en la programación, por ello vamos a dividir nuestro programa en varias clases de manera que todo sea más sencillo de programar y entender

  10. #25
    Relojero 3D Avatar de kiko_L
    Fecha de ingreso
    Dec 2005
    Ubicación
    Pamplona
    Mensajes
    1,819

    Respuesta: Proyecto fin de carrera. XNA

    Por tanto, para nuestro programa vamos a tener varias clases que paso a explicar:

    1.- Sprite.cs --> Esta clase va a ser la más básica. Es decir, va a ser la encargada de definir los parámetros básicos de nuestros sprites (elementos gráficos) de nuestro juego. En ella definiremos, entre otras cosas, los rectángulos de colisión de nuestros objetos. Estos rectángulos se usan para que el programa sepa cuando cierto elemento ha chocado contra otro.

    2.- SpriteManager.cs --> Esta clase se encargara de cargar los sprites en la escena y de dibujarlos (que no es lo mismo. Una cosa es cargar en memoria los objetos y otros dibujarlos en nuestra escena)

    3.- Jugador.cs --> Como os podéis imaginar esta clase será la que defina las propiedades del jugador (con que teclas se mueve, etc.)

    4.- CPU.cs --> Lo mismo que la anterior pero para definir al ordenador o jugador 2.

    5.- Pelota.cs --> Definira el comportamiento de la pelota.

  11. #26
    My Member
    Fecha de ingreso
    Jan 2008
    Ubicación
    Pamplona
    Mensajes
    348

    Respuesta: Proyecto fin de carrera. XNA

    Esto esta que arde, 5 stars!, a ver si soy capaz de seguir las instrucciones jeje

  12. #27
    Relojero 3D Avatar de kiko_L
    Fecha de ingreso
    Dec 2005
    Ubicación
    Pamplona
    Mensajes
    1,819

    Respuesta: Proyecto fin de carrera. XNA

    Hola a todos. Ayer empecé el Pong ( aún no lo tenía hecho xD) y hoy ya lo he terminado así que voy a empezar a explicarlo. Se podría haber hecho de una forma más sencilla pero creo que así podré explicar algunos detalles de programación como las clases abstractas, herencia, etc. que vienen muy bien. Antes que nada os pongo un enlace a un curso de C# que es muy completo:

    http://www.programacion.com/tutorial/csharp/1/

  13. #28
    Relojero 3D Avatar de kiko_L
    Fecha de ingreso
    Dec 2005
    Ubicación
    Pamplona
    Mensajes
    1,819

    Respuesta: Proyecto fin de carrera. XNA

    En este ejemplo veremos:

    * Creación de sprites

    * Herencia y clases abstractas

    * Colisiones

    Os pongo la imagen de cómo quedará al final nuestra solución

    Observareis que las imágenes de los jugadores 1 y 2 no tienen espacio ahora. Modificad las que subí el otro día (realmente no importa que tengan espacios en el nombre, pero por si acaso los quité...)
    Miniaturas adjuntadas Miniaturas adjuntadas Proyecto fin de carrera  XNa-leccion2_2.jpg  

  14. #29
    Relojero 3D Avatar de kiko_L
    Fecha de ingreso
    Dec 2005
    Ubicación
    Pamplona
    Mensajes
    1,819

    Respuesta: Proyecto fin de carrera. XNA

    Empecemos por lo basico:

    * Clase Principal (Program.cs):

    using System;

    namespace MiPrimerProgramaXNA
    {
    static class Program
    {
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    static void Main(string[] args)
    {
    using (Game1 game = new Game1())
    {
    game.Run();
    }
    }
    }
    }


    Ésta es nuestra clase principal. No tenemos que preocuparnos por ella ya que es el propio Visual Studio la que la crea por nosotros.

    Ésta clase es simplemente el punto de entrada (donde empieza la ejecución) de nuestro programa. Como veis lo único que hace en su método principal (Main) es crear una nueva instancia de la clase Game1 (que explicaré a continuación) y llamar al método Run()

    * Clase Principal (Game1.cs):

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Audio;
    using Microsoft.Xna.Framework.Content;
    using Microsoft.Xna.Framework.GamerServices;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Media;
    using Microsoft.Xna.Framework.Net;
    using Microsoft.Xna.Framework.Storage;

    namespace MiPrimerProgramaXNA
    {
    /// <summary>
    /// This is the main type for your game
    /// </summary>
    public class Game1 : Microsoft.Xna.Framework.Game
    {
    GraphicsDeviceManager graphics;
    SpriteManager spriteManager;

    public Game1()
    {
    graphics = new GraphicsDeviceManager(this);
    Content.RootDirectory = "Content";
    }

    /// <summary>
    /// Allows the game to perform any initialization it needs to before starting to run.
    /// This is where it can query for any required services and load any non-graphic
    /// related content. Calling base.Initialize will enumerate through any components
    /// and initialize them as well.
    /// </summary>
    protected override void Initialize()
    {
    // TODO: Add your initialization logic here
    spriteManager = new SpriteManager(this);
    Components.Add(spriteManager);

    base.Initialize();
    }

    /// <summary>
    /// LoadContent will be called once per game and is the place to load
    /// all of your content.
    /// </summary>
    protected override void LoadContent()
    {
    // Create a new SpriteBatch, which can be used to draw textures.
    // TODO: use this.Content to load your game content here
    }

    /// <summary>
    /// UnloadContent will be called once per game and is the place to unload
    /// all content.
    /// </summary>
    protected override void UnloadContent()
    {
    // TODO: Unload any non ContentManager content here
    }

    /// <summary>
    /// Allows the game to run logic such as updating the world,
    /// checking for collisions, gathering input, and playing audio.
    /// </summary>
    /// <param name="gameTime">Provides a snapshot of timing values.</param>
    protected override void Update(GameTime gameTime)
    {
    // Allows the game to exit
    if (GamePad.GetState(PlayerIndex.One).Buttons.Bak == ButtonState.Pressed)
    this.Exit();

    // TODO: Add your update logic here

    base.Update(gameTime);
    }

    /// <summary>
    /// This is called when the game should draw itself.
    /// </summary>
    /// <param name="gameTime">Provides a snapshot of timing values.</param>
    protected override void Draw(GameTime gameTime)
    {
    GraphicsDevice.Clear(Color.White);

    // TODO: Add your drawing code here

    base.Draw(gameTime);
    }
    }
    }


    La mayoría de esta clase se define también por defecto al crear el proyecto.

    Ésta clase tiene algo más de chicha (pero tampoco mucha). La primera parte (using ...) carga las librerías (lo hace el visual por defecto)

    A continuación definimos dos variables que van a ser cruciales para nuestro programa, la primera ya la he explicado anteriormente y la otra la explicaré más adelante

    GraphicsDeviceManager graphics;
    SpriteManager spriteManager;


    En el constructor (public Game1 ()) asignamos nuestro graphicDeviceManager a la propia variable graphics. Como veis utiliza la palabra reservada this. Esta palabra
    se usa mucho en la programación orientada a objetos y lo que quiere decir es que le asignamos a una variable el valor que tiene en dicha clase. Para explicarlo
    mejor pongo el ejemplo que veis en el método Initialize():

    spriteManager = new SpriteManager(this);

    La variable spriteManager ya ha sido declarada anteriormente pero no ha sido inicializada a ningún valor (digamos que esta vacía). Por eso creamos una nueva instancia del tipo SpriteManager (a la que pertenece la variable que hemos creado (spriteManager)) con su constructor. Este constructor tiene como parámetro una variable de tipo spriteManager y como queremos que tenga el valor actual le pasamos el parámetro actual (this). Se que parece un poco caótico pero más adelante se entendera mejor.

    Sigamos.

    Components.Add(spriteManager); --> Añade a la clase de sistema Components el spriteManager que hemos creado.
    base.Initialize(); --> Llama al propio método para inicializar (lo hace de forma recursiva, pero esto no nos debe preocupar por ahora. Aunque esta línea es necesaria)

    La carga del contenido (LoadContent()) se va a hacer a través de la clase SpriteManager y que explicaré a continuación (y por eso esta vacía en esta clase).

    En el método Update() se llama a base.Update(gameTime) de forma parecida a como se hace base.Initialize() (Lo mismo, muy necesaria). Además se añade una condición que dice que si tenemos el mando de la XBox o compatible y pulsamos la tecla Back el juego se cerrara.

    En el método Draw se define el color de fondo y otra vez se llama recursivamente al método Draw (base.Draw(gameTime))

    Antes de seguir os voy a subir el código. Así podéis ir trasteando sin tener que esperar a que explique todo (que puedo tardar aún unos días). Aún puede que tenga cosas que sobran, etc. porque no he podido revisarlo a fondo, pero la cuestión es que funciona. Eso sí, es difícil de ganar porque el jodido ordenador es casi perfecto xD. Cuando hagamos mejoras incluiremos niveles de dificultad
    Archivos adjuntados Archivos adjuntados
    Última edición por kiko_L; 09-03-2010 a las 20:46

  15. #30
    Relojero 3D Avatar de kiko_L
    Fecha de ingreso
    Dec 2005
    Ubicación
    Pamplona
    Mensajes
    1,819

    Respuesta: Proyecto fin de carrera. XNA

    Bien, sigamos. Hemos dicho que se crea una clase llamada SpriteManager. Bien, pues aquí esta:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Audio;
    using Microsoft.Xna.Framework.Content;
    using Microsoft.Xna.Framework.GamerServices;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Media;
    using Microsoft.Xna.Framework.Net;
    using Microsoft.Xna.Framework.Storage;

    namespace MiPrimerProgramaXNA
    {
    /// <summary>
    /// This is a game component that implements IUpdateable.
    /// </summary>
    ///

    public class SpriteManager : Microsoft.Xna.Framework.DrawableGameComponent
    {
    SpriteBatch spriteBatch;
    Jugador player;
    Pelota pelota;
    CPU cpu;
    Texture2D textura;

    public SpriteManager(Game game)
    : base(game)
    {
    // TODO: Construct any child components here
    }

    /// <summary>
    /// Allows the game component to perform any initialization it needs to before starting
    /// to run. This is where it can query for any required services and load content.
    /// </summary>
    public override void Initialize()
    {
    // TODO: Add your initialization code here

    textura = Game.Content.Load<Texture2D>(@"imágenes\Escenario" );

    base.Initialize();
    }

    protected override void LoadContent()
    {
    spriteBatch = new SpriteBatch(Game.GraphicsDevice);

    player = new Jugador(
    Game.Content.Load<Texture2D>(@"imágenes/Jugador1"),
    new Vector2(20,300), new Point(10, 60), 1, new Point(0, 0),
    new Point(6, 8 ), new Vector2(6, 6));

    cpu = new CPU(
    Game.Content.Load<Texture2D>(@"imágenes/Jugador2"),
    new Vector2(780, 300), new Point(10, 60), 1, new Point(0, 300),
    new Point(6, 8 ), new Vector2(0,6),this);

    pelota = new Pelota(
    Game.Content.Load<Texture2D>(@"imágenes/Pelota"),
    new Vector2(400, 300), new Point(18, 18 ), 1, new Point(400, 300),
    new Point(6, 8 ), new Vector2(6,6),this,player,cpu);

    base.LoadContent();
    }

    /// <summary>
    /// Allows the game component to update itself.
    /// </summary>
    /// <param name="gameTime">Provides a snapshot of timing values.</param>
    public override void Update(GameTime gameTime)
    {
    // Update player,cpu y pelota
    player.Update(gameTime, Game.Window.ClientBounds);
    pelota.Update(gameTime, Game.Window.ClientBounds);
    cpu.Update(gameTime, Game.Window.ClientBounds);

    base.Update(gameTime);
    }

    public override void Draw(GameTime gameTime)
    {
    spriteBatch.Begin(SpriteBlendMode.AlphaBlend,
    SpriteSortMode.BackToFront, SaveStateMode.None);

    // Dibujamos el jugador, cpu y pelota
    player.Draw(gameTime, spriteBatch);
    cpu.Draw(gameTime, spriteBatch);
    pelota.Draw(gameTime, spriteBatch);

    //Dibujamos escenario
    spriteBatch.Draw(textura, new Vector2((800 / 2) - (textura.Width / 2),
    (600 / 2) - (textura.Height / 2)),
    null,Color.White, 0, Vector2.Zero, 1,SpriteEffects.None, 1);

    spriteBatch.End();

    base.Draw(gameTime);
    }

    public Vector2 PosicionPelota()
    {
    return pelota.GetPosition;
    }

    }
    }



    ¿Qué va a hacer esta clase?

    Esta clase se va a encargar de gestionar los sprites (en nuestro caso jugador1 (player), jugador cpu (cpu) y la pelota (pelota)), es decir, los va a crear,
    cargar, dibujar en la escena y llamar a sus metodos Update que nos dirán qué hacer si algo cambia en dichos sprites.

    Ahora veamos la estructura:

    Declaración de variables

    SpriteBatch spriteBatch; --> Clase de sistema encargada de dibujar los sprites en pantalla
    Jugador player; --> Nuestro jugador
    Pelota pelota; --> Pelota
    CPU cpu; --> Jugador cpu
    Texture2D textura; --> Textura2D usada para cargar el escenario

    Tanto player, pelota como cpu pertenecen a clases (Jugador, Pelota y CPU) que heredan de una clase llamada Sprite.

    Creo que voy a explicar en qué consiste la herencia, aunque su propio nombre lo indica. Supongamos que tenemos una clase Persona que tiene un método Edad que nos
    devuelve la edad de una persona. Supongamos también que dicha clase Persona tiene las variables edad,nombre y apellido.

    Ahora imaginemos que queremos hacer una nueva clase que se llama Jugador. Queremos que esa clase tenga las variables edad,nombre y apellido y además altura. No tendría mucho
    sentido crearse esta clase con todas sus variables (edad, nombre, etc.) cuando ya tenemos la clase Persona que implementa la mayoría. Por eso definimos la clase
    Jugador como una clase que hereda de Persona y por tanto podremos acceder a todos sus métodos y variables y añadir nuevas que serán propias de la clase Jugador.

    Más adelante lo veremos mejor.

    En la parte de inicialización simplemente vamos a darle valor a la variable textura:

    textura = Game.Content.Load<Texture2D>(@"imágenes\Escenario" );

    Para ello utilizamos Game.Content.Load<tipoArchivo>(@"Localización"). En tipoArchivo se podrán cargar muchos tipos de objeto como veremos en lecciones sucesivas.

    Llegamos a la parte de carga de contenido:

    spriteBatch = new SpriteBatch(Game.GraphicsDevice);

    player = new Jugador(
    Game.Content.Load<Texture2D>(@"imágenes/Jugador1"),
    new Vector2(20,300), new Point(10, 60), 1, new Point(0, 0),
    new Point(6, 8 ), new Vector2(6, 6));

    cpu = new CPU(
    Game.Content.Load<Texture2D>(@"imágenes/Jugador2"),
    new Vector2(780, 300), new Point(10, 60), 1, new Point(0, 300),
    new Point(6, 8 ), new Vector2(0,6),this);

    pelota = new Pelota(
    Game.Content.Load<Texture2D>(@"imágenes/Pelota"),
    new Vector2(400, 300), new Point(18, 18 ), 1, new Point(400, 300),
    new Point(6, 8 ), new Vector2(6,6),this,player,cpu);

    base.LoadContent();

    Aquí lo que hacemos es darle valor a spriteBatch que nos servirá en el método Draw para dibujar los sprites. Además vamos a crear una instancia de nuestros elementos
    (player,cpu,pelota). Los parámetros que le pasamos al constructor los veremos cuando desbrocemos la clase Sprite. Aquí nos basta con quedarnos con el concepto de que
    estamos creando e inicializando nuestros elementos gráficos.

    A continuación llamamos a los métodos update de cada uno de los sprites. A simple vista parece un poco raro llamar a todo a la vez, parece un poco caótico, pero
    estos métodos se quedaran a la espera de eventos que vengan del ratón, teclado, etc. Esto es más eficiente que estar continuamente preguntando al ratón si se ha movido.
    (Más conocido como técnica Polling (no es coña xD http://es.wikipedia.org/wiki/Polling))

    Una vez que nuestros sprites están "funcionando" vamos a dibujarlos en la pantalla. Para ello utilizamos el método Draw

    spriteBatch.Begin(SpriteBlendMode.AlphaBlend,Sprit eSortMode.BackToFront, SaveStateMode.None); --> Le decimos a la variable spriteBatch de que
    forma queremos que gestione los sprites (qué se ve encima de qué, si algún elemento se ve transparente, etc.)

    // Dibujamos el jugador, cpu y pelota
    player.Draw(gameTime, spriteBatch);
    cpu.Draw(gameTime, spriteBatch);
    pelota.Draw(gameTime, spriteBatch);

    //Dibujamos escenario
    spriteBatch.Draw(textura, new Vector2((800 / 2) - (textura.Width / 2),
    (600 / 2) - (textura.Height / 2)),
    null,Color.White, 0, Vector2.Zero, 1,SpriteEffects.None, 1);

    spriteBatch.End();

    base.Draw(gameTime);

    Mañana sigo trasteando y explicando código señor@s, un saludo!

Página 2 de 5 PrimerPrimer 12345 ÚltimoÚltimo

Temas similares

  1. Proyecto Fin de Carrera
    Por Jimmy78 en el foro Quien eres tu - Aqui puedes presentarte
    Respuestas: 3
    Último mensaje: 31-12-2008, 05:31
  2. proyecto fin de carrera II
    Por anatole en el foro Trabajos Finalizados
    Respuestas: 6
    Último mensaje: 20-09-2008, 12:16
  3. proyecto fin de carrera
    Por anatole en el foro Trabajos Finalizados
    Respuestas: 8
    Último mensaje: 12-09-2008, 11:27
  4. Proyecto final de carrera
    Por trombone_cot en el foro Colaboraciones e Iniciativas
    Respuestas: 1
    Último mensaje: 25-04-2007, 22:02
  5. Mi Proyecto Final de Carrera
    Por Art3D en el foro Infografía General
    Respuestas: 31
    Último mensaje: 11-04-2007, 20:22

Actualmente estos son sus permisos de publicación en el foro.

  • -No puedes crear nuevos temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes responder temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes subir archivos adjuntos al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes editar tus mensajes al no estar registrado o no haber iniciado sesión en el foro.
  •