Gracias Gracias:  11
Página 3 de 5 PrimerPrimer 12345 ÚltimoÚltimo
Resultados 31 al 45 de 62

Tema: Proyecto fin de carrera XNa

  1. #31
    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 he estado trasteando un poco más con el mando de la Wii y he conseguido manejar el pong con el mando!! jeje. Os explicaré más adelante como hacerlo porque es muy sencillo.

    Os dejo el código y varios enlaces para instalar el mando en el ordenador:

    Librería para utilizar la Wii en nuestras aplicaciones:

    http://www.brianpeek.com/blog/pages/wiimotelib.aspx
    http://www.codeplex.com/WiimoteLib

    Como conectar el mando al PC:

    http://wiki.truevision3d.com/tutoria..._tv3d_projects

    http://www.taringa.net/posts/ebooks-...ote-en-PC.html

    Basicamente hay que tener un receptor bluetooth (yo me compre uno por dealextreme por 1 euro y medio), conectarlo al usb, ir al panel de control y en dispositivos bluetooth darle a añadir uno nuevo. Mantened aprietados los botones 1 y 2 del mando a la vez mientras busca el dispositivo, luego nos saldrá el mando y nos pedirá una clave (elegir la última opción (sin clave)), y le damos a siguiente. Durante todo este proceso no soltamos los botones 1 y 2 (ni siquiera cuando nos pide clave), ya que sino no funcionara.

    Hoy me voy a tomar un descanso en la explicación de código que estoy bastante petao xD.

    Pero mañana prometo seguir.

    Saludos!
    Archivos adjuntados Archivos adjuntados

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

    Respuesta: Proyecto fin de carrera. XNA

    Bueno bueno bueno, sigamos con la lección:

    Voy a hablaros ahora de las clases que heredan de Sprite.

    * Clase CPU:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Graphics;

    namespace MiPrimerProgramaXNA
    {
    class CPU : Sprite
    {
    Vector2 vecPelota;
    SpriteManager spriteManager;

    public CPU(Texture2D texImagen, Vector2 posición, Point tamFrame,
    int offsetColision, Point frameAct, Point sheetSize, Vector2 velocidad,SpriteManager spriteManager2)
    : base(texImagen, posición, tamFrame, offsetColision, frameAct,
    sheetSize, velocidad)
    {
    spriteManager = spriteManager2;
    }
    public CPU(Texture2D texImagen, Vector2 posición, Point tamFrame,
    int offsetColision, Point frameAct, Point sheetSize, Vector2 velocidad,
    int millisecondsPerFrame, SpriteManager spriteManager2)
    : base(texImagen, posición, tamFrame, offsetColision, frameAct,
    sheetSize, velocidad, millisecondsPerFrame)
    {
    spriteManager = spriteManager2;
    }

    public override Vector2 direccion
    {
    get { return velocidad; }
    }

    public override void Update(GameTime gameTime, Rectangle clientBounds)
    {
    posición += direccion;

    vecPelota = spriteManager.PosicionPelota();

    posición.Y = vecPelota.Y;

    if (posición.X < 0)
    posición.X = 0;
    if (posición.Y < 0)
    posición.Y = 0;
    if (posición.X > clientBounds.Width - tamFrame.X)
    posición.X = clientBounds.Width - tamFrame.X;
    if (posición.Y > clientBounds.Height - tamFrame.Y)
    posición.Y = clientBounds.Height - tamFrame.Y;

    base.Update(gameTime, clientBounds);

    }

    }
    }


    Lo primero que observamos es que después de class CPU tenemos dos puntos y Sprite

    class CPU : Sprite

    Con esto estamos diciendo que la clase CPU hereda de la clase Sprite. Digamos que es una "ampliación" de dicha clase.

    Declaramos dos variables:

    Vector2 vecPelota;
    SpriteManager spriteManager;


    vecPelota va a ser una vector X,Y que nos va a indicar la posición en la que se encuentra la pelota. Esto lo vamos a usar para que el jugador CPU se mueva sólo en función de las Y de la pelota.

    El spriteManager lo usaremos para poder usar métodos que tenemos definidos en la clase SpriteManager. Basicamente para conocer la posición de la pelota.

    A continuación vienen los constructores. Vemos que hay dos, con diferentes parámetros de entrada, es lo que se conoce como sobrecarga de métodos (ya que al fin y al cabo un constructor es también un método). Es decir, podríamos tener dos métodos suma cada uno con diferentes parámetros (por ejemplo suma(numero1,numero2) y suma(numero1,numero2,numero3)). Los constructores los explicaré más adelante.

    El siguente paso es definir el atributo público llamado direccion que es de tipo Vector2 y que como veis tiene la palabra reservada override en su declaración. Esto quiere decir que esta sobreescribiendo un atributo abstracto que hemos creado en su clase base, que en este caso es la clase Sprite. Por tanto estamos re-definiendo el atributo, para que haga más cosas de las que hace en la clase base.

    public override Vector2 direccion
    {
    get { return velocidad; }
    }


    El atributo devuelve la variable velocidad (Definida en el constructor de la clase Sprite) y que, como bien indica el nombre, devuelve la velocidad a la que se mueve el sprite. Con esto podremos modificar la velocidad de la pelota por ejemplo (lo veremos)

    Lo siguiente es ya le método Update propio de la clase CPU.

    // Sumamos a la posición actual del sprite la dirección (Velocidad) obtenida
    posición += direccion;

    //Llamamos al método PosicionPelota() de la clase spriteManager y lo guardamos en el Vector2D vecPelota
    vecPelota = spriteManager.PosicionPelota();

    //Asignamos a la posición actual en el eje Y la posición de la pelota en el eje // Y. Con esto vemos que el ordenador se mueve en la misma posición Y que
    // la pelota. Podríamos multiplicar por un valor aleatorio que le de cierta //"estupidez" a la máquina. O jugar con diferentes niveles de dificultad

    posición.Y = vecPelota.Y;

    // Aquí controlamos que la posición X e Y del sprite no se salga de la pantalla
    // Así evitamos que el sprite desaparezca por arriba, abajo o los lados.

    if (posición.X < 0)
    posición.X = 0;
    if (posición.Y < 0)
    posición.Y = 0;
    if (posición.X > clientBounds.Width - tamFrame.X)
    posición.X = clientBounds.Width - tamFrame.X;
    if (posición.Y > clientBounds.Height - tamFrame.Y)
    posición.Y = clientBounds.Height - tamFrame.Y;


    Hasta aquí la clase CPU
    Última edición por kiko_L; 11-03-2010 a las 22:31

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

    Respuesta: Proyecto fin de carrera. XNA

    Siiigamos.

    Clase Jugador:

    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 MiPrimerProgramaXNA
    {
    class Jugador : Sprite
    {
    public Jugador(Texture2D texImagen, Vector2 posición,
    Microsoft.Xna.Framework.Point tamFrame, int offsetColision, Microsoft.Xna.Framework.Point frameAct, Microsoft.Xna.Framework.Point sheetSize,
    Vector2 velocidad)
    : base(texImagen, posición, tamFrame, offsetColision, frameAct,
    sheetSize, velocidad)
    {
    }

    public Jugador(Texture2D texImagen, Vector2 posición,
    Microsoft.Xna.Framework.Point tamFrame, int offsetColision, Microsoft.Xna.Framework.Point frameAct, Microsoft.Xna.Framework.Point sheetSize,
    Vector2 velocidad, int millisecondsPerFrame)
    : base(texImagen, posición, tamFrame, offsetColision, frameAct,
    sheetSize, velocidad, millisecondsPerFrame)
    {
    }

    public override Vector2 direccion
    {
    get
    {
    // Devuelve la dirección en función del teclado o el pad
    Vector2 inputDireccion = Vector2.Zero;
    /*if (Keyboard.GetState().IsKeyDown(Keys.Left))
    inputDireccion.X -= 1;
    if (Keyboard.GetState().IsKeyDown(Keys.Right))
    inputDireccion.X += 1;*/
    if (Keyboard.GetState().IsKeyDown(Keys.Up))
    inputDireccion.Y -= 1;
    if (Keyboard.GetState().IsKeyDown(Keys.Down))
    inputDireccion.Y += 1;

    return inputDireccion * velocidad;
    }
    }

    public override void Update(GameTime gameTime, Rectangle clientBounds)
    {
    posición += direccion;

    if (posición.X < 0)
    posición.X = 0;
    if (posición.Y < 0)
    posición.Y = 0;
    if (posición.X > clientBounds.Width - tamFrame.X)
    posición.X = clientBounds.Width - tamFrame.X;
    if (posición.Y > clientBounds.Height - tamFrame.Y)
    posición.Y = clientBounds.Height - tamFrame.Y;

    base.Update(gameTime, clientBounds);
    }
    }
    }


    Como veis la clase es prácticamente igual a la clase CPU. Lo único que cambia es que en el atributo dirección estamos modificando la dirección en función de que tecla pulsemos (Arriba o abajo. También podríamos jugar moviendo a izquierda y derecha descomentando las líneas comentadas)

    Al final multiplicamos por el vector velocidad y así tendremos el aumento o decremento del eje Y que debemos aplicar a la posición del sprite Jugador. Simple pero efectivo.

    En este caso, en los constructores, no le pasamos el parámetro spriteManager porque no necesitamos llamar a ningún método suyo. Al fin y al cabo nosotros somos los que movemos el "palito" y no dependemos de ningún otro sprite (ni de la pelota ni de la CPU)

    Ahora veremos un caso más claro en el que dependemos de otros sprites. La clase Pelota.

    Pasemos a dicha clase:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Graphics;

    namespace MiPrimerProgramaXNA
    {
    class Pelota : Sprite
    {

    SpriteManager spriteManager;
    Jugador player;
    CPU cpu;
    Vector2 cpuVec;

    public Pelota(Texture2D texImagen, Vector2 posición, Point tamFrame,
    int offsetColision, Point frameAct, Point sheetSize, Vector2 velocidad,SpriteManager spriteManager2,Jugador player2,CPU cpu2)
    : base(texImagen, posición, tamFrame, offsetColision, frameAct,
    sheetSize, velocidad)
    {
    spriteManager = spriteManager2;
    cpu = cpu2;
    player = player2;
    }
    public Pelota(Texture2D texImagen, Vector2 posición, Point tamFrame,
    int offsetColision, Point frameAct, Point sheetSize, Vector2 velocidad,
    int millisecondsPerFrame, SpriteManager spriteManager2, Jugador player2, CPU cpu2)
    : base(texImagen, posición, tamFrame, offsetColision, frameAct,
    sheetSize, velocidad, millisecondsPerFrame)
    {
    spriteManager = spriteManager2;
    cpu = cpu2;
    player = player2;
    }

    public override Vector2 direccion
    {
    get { return velocidad; }
    }

    public override void Update(GameTime gameTime, Rectangle clientBounds)
    {
    posición += direccion;

    if (posición.Y > 599)
    velocidad.Y *= -1.1f;
    if (posición.Y < 1)
    velocidad.Y *= -1.1f;
    if (posición.X > 800)
    resetPelota();
    if (posición.X < 1)

    resetPelota();

    if (this.rectColision.Intersects(cpu.rectColision))
    {
    velocidad.X *= -1;
    }
    if (this.rectColision.Intersects(player.rectColision) )
    {
    velocidad.X *= -1;
    }

    base.Update(gameTime, clientBounds);
    }

    public void resetPelota()
    {
    posición.X = 400;
    posición.Y = 300;
    velocidad.X = 5;
    velocidad.Y = 5;
    }



    }
    }


    Como veis definimos varias variables:

    SpriteManager spriteManager;
    Jugador player;
    CPU cpu;
    Vector2 cpuVec;


    SpriteManager ya conocida, una instancia de la clase Jugador (player) y otra de la clase CPU (cpu) y un Vector2 con la posición de la instancia cpu.

    En el constructor vemos que le estamos pasando dichas instancias (player y cpu) además del spriteManager

    ¿Y esto para qué? Pues muy simple, necesitamos conocer exactamente donde están dichos objetos para ver cuando se colisiona con ellos. Para ello se los pasamos como parámetro a la clase Pelota y así podemos acceder a sus variables y métodos. Es lo que hacemos en la clase SpriteManger al crear la pelota y los jugadores. Si os fijais a la pelota le pasamos los jugadores recien creados

    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);


    A continuación en el método Update vamos a aumentar la velocidad de la pelota multiplicandola por -1.1f cada vez que choque contra las paredes superior e inferior. Con el negativo lo que hacemos es que cambie la dirección de la pelota. También haremos un resetPelota() si nos salimos por la izquierda o por la derecha

    if (posición.Y > 599)
    velocidad.Y *= -1.1f;
    if (posición.Y < 1)
    velocidad.Y *= -1.1f;
    if (posición.X > 800)
    resetPelota();
    if (posición.X < 1)

    resetPelota();


    Esta parte es importante ya que nos permite saber cuando choca. Lo que haremos es llamar al atributo rectColision definido en la clase Sprite que ahora veremos y junto al método Intersects mirara si choca con el rectColision de la clase CPU. Dicho de otra forma, tenemos dos rectángulos (uno para la pelota y otro para el jugador cpu), si ambos "chocan" (lo cual comprobamos con el método Intersects de la clase Rectangle cambiamos la dirección multiplicando la velocidad por -1 ("damos marcha atras").

    Como veréis llamamos a rectColision con this, esto es por lo que os expliqué, la clase Pelota hereda de Sprite y por tanto tiene su atributo rectColision (aunque en la propia clase Pelota no aparezca) heredado, y por tanto así le estamos diciendo "accede a tu propio atributo rectColision".

    Lo mismo ocurre cuando chocamos con el jugador.

    if (this.rectColision.Intersects(cpu.rectColision))
    {
    velocidad.X *= -1;
    }
    if (this.rectColision.Intersects(player.rectColision) )
    {
    velocidad.X *= -1;
    }


    Por último definimos el método resetPelota() que lo único que hace es decir que la pelota empiece en la posición (400,300) y que lleve la velocidad (5,5)

    public void resetPelota()
    {
    posición.X = 400;
    posición.Y = 300;
    velocidad.X = 5;
    velocidad.Y = 5;
    }

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

    Respuesta: Proyecto fin de carrera. XNA

    Y ya para terminar este ilustrativo ejemplo, voy a poner la clase de más "bajo nivel". La clase Sprite:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Graphics;

    namespace MiPrimerProgramaXNA
    {
    abstract class Sprite
    {
    Texture2D texImagen;
    protected Vector2 posición;
    protected Point tamFrame;
    int offsetColision;
    Point frameActu;
    Point sheetSize;
    int milisegFrame;
    protected Vector2 velocidad;
    const int defaultmilisegFrame = 16;

    public abstract Vector2 direccion
    {
    get;
    }

    public Rectangle rectColision
    {
    get
    {
    return new Rectangle(
    (int)posición.X + offsetColision,
    (int)posición.Y + offsetColision,
    tamFrame.X - (offsetColision * 2),
    tamFrame.Y - (offsetColision * 2));
    }
    }

    public Sprite(Texture2D texImagen, Vector2 posición, Point tamFrame,
    int offsetColision, Point frameActu, Point sheetSize, Vector2 velocidad)
    : this(texImagen, posición, tamFrame, offsetColision, frameActu,
    sheetSize, velocidad, defaultmilisegFrame)
    {
    }

    public Sprite(Texture2D texImagen, Vector2 posición, Point tamFrame,
    int offsetColision, Point frameActu, Point sheetSize, Vector2 velocidad,
    int milisegFrame)
    {
    this.texImagen = texImagen;
    this.posición = posición;
    this.tamFrame = tamFrame;
    this.offsetColision = offsetColision;
    this.frameActu = frameActu;
    this.sheetSize = sheetSize;
    this.velocidad = velocidad;
    this.milisegFrame = milisegFrame;
    }

    public virtual void Update(GameTime gameTime, Rectangle clientBounds)
    {
    }

    public virtual void Draw(GameTime gameTime, SpriteBatch spriteBatch)
    {
    //Dibujamos el sprite
    spriteBatch.Draw(texImagen,
    posición, new Rectangle(frameActu.X * tamFrame.X,
    frameActu.Y * tamFrame.Y, tamFrame.X, tamFrame.Y), Color.White, 0, Vector2.Zero,1f, SpriteEffects.None, 0);
    }

    public Vector2 GetPosition
    {
    get {
    return posición;
    }
    }
    }
    }


    Variables:

    Texture2D texImagen; --> Textura del sprite
    protected Vector2 posición; --> Posicion en la que empieza
    protected Point tamFrame; --> Tamaño del Sprite
    int offsetColision; --> Un offset en la colisión (en caso de que no querramos que choque en cuanto toque el sprite sino más tarde)
    Point frameActu; --> Frame actual
    Point sheetSize; --> Esto no lo vamos a usar, se podría borrar.
    int milisegFrame; --> Tampoco lo vamos a usar.
    protected Vector2 velocidad; --> Velocidad
    const int defaultmilisegFrame = 16; --> Tampoco lo usaremos


    Lo siguiente que haremos es crear el atributo rectColision a partir de ciertos parámetros de entrada como el tamaño del sprite, el offset de colision, etc.

    Después van los constructores y el Update que no hace nada. Por último vemos que se llama al método Draw que tiene como parámetro (Además del gameTime) el spriteBatch del que hablamos en la clase SpriteManager. Con esto dibujaremos en pantalla todos aquellos objetos de una clase que herede de Sprite.

    Con esto lo que estamos haciendo es ahorrar MUCHO código. En este ejemplo puede que no porque solamente tenemos tres sprites. Pero imaginemos que tenemos un pong con mil tipos de items, power-ups, etc. Para cada uno tendríamos que definir su constructor propio, sus atributos, etc. Con la herencia sin embargo solamente tendríamos que definir los atributos propios de cada sprite.

    También definimos el atributo GetPosition para obtener la posición del sprite (se utiliza cuando queremos devolver la posición de la pelota a la clase CPU)

    Y hasta aquí ha llegado esto. Si tenéis cualquier duda me comentais, y si soy capaz, os la resolveré xD. Seguiré poniendo cosas y en no mucho empezaré a habler del 3D, aunque aún le tengo que meter muucha chicha.

    Os dejo el código un poco más retocado.

    Un saludo!
    Archivos adjuntados Archivos adjuntados

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

    Re: Proyecto fin de carrera. XNA

    Buenas, ayer estuve trasteando un poco más y logré enchufar el mando de la wii a una aplicación en 3D. Ahora con el mando puedo mover la cámara hacia donde quiera! xD. La semana que viene prometo empezar con el tutorial de como hacer una miniaplicación en 3D

    Saludos

  6. #36
    Senior Member Avatar de pigo0019
    Fecha de ingreso
    May 2007
    Ubicación
    Mexico
    Mensajes
    2,616

    Re: Proyecto fin de carrera. XNA

    En hora buena y espero tener el gusto de ya ver terminado el proyecto. te dejo un saludo desde Mexico.
    -------------------------------------------------
    Todo lo que hagamos hoy tiene eco en la eternidad
    -------------------------------------------------

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

    Re: Proyecto fin de carrera. XNA

    Muchas gracias pigo, acabo de empezar pero espero conseguir algo bonito y divertido.

    Saludos!

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

    Re: Proyecto fin de carrera. XNA

    que tutorial; enorabuena, eres el amo
    DICEN que tras la muerte está la vida eterna. Yo prefiero ensañarme con el cuerpo.

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

    Re: Proyecto fin de carrera. XNA

    Gracias Sadyk, hoy por la tarde espero poder empezar a adentrarme un poco más en las aplicaciones 3D con XNA.

    Saludos!

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

    Re: Proyecto fin de carrera. XNA

    Hola a todos, siento esta tardanza con el tema del 3D en XNA, pero entre el curro y el proyecto no me da la vida....Espero entre hoy y mañana empezar poco a poco a mostrar los fundamentos básicos que hacen falta para programar juegos y aplicaciones en 3D con XNA. Un saludo a todos

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

    Re: Proyecto fin de carrera. XNA

    Estoy vivo!!

    Después de tanto tiempo sigo con el dichoso proyecto, pero en un par de meses espero quitarmelo de encima...¡Por fin!

    Espero poder seguir con estos tutoriales que los dejé tirados y me sabe mal por si alguien les hacía caso xD.

    Al final mi proyecto consistira más que en una mega-aplicación, en varias cosas que he ido descubriendo sobre XNA.

    Os pongo un vídeo de una cosilla que hice con XNA, el motor de iluminación SunBurn y el motor físico BEPU.

    Perdón por la calidad de los vídeos pero el FRAPS no da más de sí.





    Como veis hay que ser Michael Jordan para encestar una xD

    Un saludo!

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

    Re: Proyecto fin de carrera. XNA

    Buenas, después de toquitear un poquito más la iluminación y añadir un skybox (para simular un fondo 360º) os dejo unos pantallazos de cómo esta quedando. Lo siguiente será mejorar texturas y modelos (trabajo puramente de 3D Max) y meterme en el postprocesado de efectos (Profundidad de campo, motion blur, y demás efectos que os suenan más). Dentro de un rato intentaré empezar con la aplicación 3D que os prometí. Primero haré un ejemplo con XNA puro, es decir, sin motores de por medio. Crearemos una cámara, meteremos unos objetos y luego nos meteremos en reconocimiento de objetos seleccionados y demás. Más adelante hablaré de motores de iluminación como Sunburn y físicos como BEPU Physics que son las cosas realmente potentes y que facilitan muchísimo el desarrollo de juegos(salvo que queráis crearos vuestros propios motores... locos hay muchos en el mundo xD
    Miniaturas adjuntadas Miniaturas adjuntadas Proyecto fin de carrera  XNa-92742196.png   Proyecto fin de carrera  XNa-79852983.png   Proyecto fin de carrera  XNa-55732916.png  
    Última edición por 3dpoder; 23-12-2011 a las 19:45 Razón: Adjuntar imágenes y archivos al foro

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

    Re: Proyecto fin de carrera. XNA

    He visto los videos, mola como esta quedando! supongo que la cámara y todo lo manejas con la wii, no? creo que has hecho el primer juego en primera persona de baloncesto! xDD
    saludos y suerte!
    pd: estaré pendiente de si sigues el tutorial
    DICEN que tras la muerte está la vida eterna. Yo prefiero ensañarme con el cuerpo.

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

    Re: Proyecto fin de carrera. XNA

    Hola Sadyk, gracias. Si, el movimiento es totalmente con la Wii, tanto la cámara como la interacción con los objetos. Los balones se lanzan en función del acelerómetro.

    Hoy si que si pondré como cargar un objeto en una escena 3D y crear una cámara para poder movernos en ese escenario.

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

    Re: Proyecto fin de carrera. XNA

    Hay veces que no es tan de locos. Por ejemplo, tú mismo has dicho que hay que ser Jordan para encestar. En un juego de baloncesto que quiera ser jugable, el gameplay tendría "mano ancha" con los tiros que permite entrar a canasta, en función de la distancia a ella, el ángulo y un pequeño factor de probabilidad de encestar tanto más alto como fácil se pretenda el juego. No sé si el motor de físicas que usas permite "trampear" resultados y calcular cual tendría que ser el tiro idóneo desde tu posición para que entrara y, a partir de ahí, intentar ajustar la trayectoria del disparo "real" con la "trapicheada" para que enceste más veces, pero es como en mi opinión sería más apropiado para conseguir una jugabilidad divertida.

    Qué ramalazo de añoranza me acaba de dar de cuando Estábamos en el HoopWorld para WiiWare, joer

Página 3 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.
  •