-
Mar1No Comments
Ya hacia tiempo que no escribía nada sobre XNA. Así que voy a escribir un cortito (pero útil) tutorial de como hacer Parallax Scroll en XNA.
Es muy facilito, y además de dejaros el código fuente del proyecto, os dejare también las imágenes y una explicación del código para que lo hagáis vosotros.
IMAGENES
Pinchar sobre la imagen, se os abrirá una nueva ventana. Guardaros esa imagen.
http://nosoyfriky.es/cosasxna/rocas.png
http://nosoyfriky.es/cosasxna/espacio.png
http://nosoyfriky.es/cosasxna/planeta.png
CLASE CapaParallax
Como podemos ver, esta clase tan simple representa una capa del fondo, el cual tiene una velocidad determinada, así como una textura.
1 class CapaParallax
2 {
3 private Texture2D textura = null;
4 private Vector2 posicion = Vector2.Zero;
5 private Vector2 desplazamiento = Vector2.Zero;
6 private float velocidad = 10.0f;
7
8 private float viewportWidth = 0.0f;
9
10
11 /// <summary>
12 /// Constructor de la capa de parallax Scrolling
13 /// </summary>
14 /// <param name="graphics">Donde se dibujara la capa</param>
15 /// <param name="texture">Textura de la capa</param>
16 /// <param name="speed">Velocidad con la que se movera la capa</param>
17 public CapaParallax(GraphicsDeviceManager graphics, Texture2D texture, float speed)
18 {
19 textura = texture;
20
21 viewportWidth = graphics.GraphicsDevice.Viewport.Width;
22
23 posicion = new Vector2(0.0f, 0.0f);
24 desplazamiento = new Vector2(viewportWidth, 0.0f);
25
26 velocidad = speed;
27 }Para el funcionamiento del parallax, necesitamos que cada capa se mueva a una velocidad distinta. Cuanto más rápido sea el movimiento, nos parecerá que esta más próxima la capa.
30 /// <summary>
31 /// Actualiza la posicion de la capa
32 /// </summary>
33 /// <param name="gameTime">Tiempo transcurrido de juego</param>
34 public void Update(GameTime gameTime)
35 {
36
37
38
39 float delta = (float)gameTime.ElapsedGameTime.TotalSeconds;
40
41 posicion.X -= velocidad * delta;
42 posicion.X = posicion.X % textura.Width;
43
44 }
45
46
47 /// <summary>
48 /// Da la sensacion de que nos movemos a la derecha
49 /// </summary>
50 /// <param name="gameTime"></param>
51 public void MoverDerecha(GameTime gameTime)
52 {
53 float delta = (float)gameTime.ElapsedGameTime.TotalSeconds;
54
55 posicion.X -= velocidad * delta;
56 posicion.X = posicion.X % textura.Width;
57 }
58
59 /// <summary>
60 /// Da la sensacion de que nos movemos a la izquierda
61 /// </summary>
62 /// <param name="gameTime"></param>
63 public void MoverIzquierda(GameTime gameTime)
64 {
65 float delta = (float)gameTime.ElapsedGameTime.TotalSeconds;
66
67 posicion.X += velocidad * delta;
68 posicion.X = posicion.X % textura.Width;
69 }
70
71
72 /// <summary>
73 /// Dibuja la capa
74 /// </summary>
75 /// <param name="spriteBatch"></param>
76 public void Draw(SpriteBatch spriteBatch)
77 {
78 //Como es una capa "continua", tenemos que dibujarla
79 // otra vez cuando se salga de la pantalla
80
81 if (posicion.X < viewportWidth)
82 {
83 spriteBatch.Draw(textura, posicion, Color.White);
84 }
85
86 spriteBatch.Draw(textura, posicion + desplazamiento, Color.White);
87 }
88 }GAME1.CS
Con esta clase ya implementada, tenemos que agregar en nuestro juegos las diferentes capas que queramos y almacenarlas todas en una lista.
1 //Texturas de las capas
2 private Texture2D planeta;
3 private Texture2D espacio;
4 private Texture2D rocas;
5
6 private List<CapaParallax> capasParallax;O bien en el constructor o bien en en metodo “Initialize” tenemos que crear las capas:
1 protected override void Initialize()
2 {
3 // TODO: Add your initialization logic here
4 planeta = this.Content.Load<Texture2D>("planeta");
5 rocas = this.Content.Load<Texture2D>("rocas");
6 espacio = this.Content.Load<Texture2D>("espacio");
7
8
9 //Cuidado con el orden de insercion.
10 //1º lo mas alejado
11 capasParallax = new List<CapaParallax>();
12 capasParallax.Add(new CapaParallax(graphics, planeta, 0.0f)); //la velocidad es 0, no se mueve
13 capasParallax.Add(new CapaParallax(graphics, espacio, 10.0f));
14 //luego lo mas cercano
15 capasParallax.Add(new CapaParallax(graphics, rocas, 50.0f));
16
17 base.Initialize();
18 }En el update tan facil como:
1 foreach (CapaParallax capa in capasParallax)
2 {
3 capa.Update(gameTime);
4 }y lo mismo en el metodo Draw:
1 foreach (CapaParallax capa in capasParallax)
2 {
3 capa.Draw(spriteBatch);
4 } -
Feb24No Comments
Si es que no aprendo. Me he vuelto a meter yo solito en otro lio. Resulta que ahora voy a dar un taller sobre Windows Forms. Será el proximo día 5 de marzo a las 11. Os dejo con más datos y con en enlace:
Aprende a crear aplicaciones para Windows desde cero. Camilo Galiana, quien también impartió el "Webcast C# para programadores de C++ y Java", se dispone ahora a hacer una clase práctica para enseñarnos a crear aplicaciones de escritorio en el sistema operativo Windows.
Fecha: Viernes, 05 de marzo de 2010
Hora: 11:00 – 13:00
Lugar: Edificio EPS 1 – Laboratorio L26
Lo más “fuerte” es que ya no quedan plazas. Se supone que asistirán unas 30 personas, pero no creo que vayan todas. Si te has quedado sin plaza y te gustaría asistir, puedes pasarte por el laboratorio unos minutos antes de empezar que seguro que hay plazas libres.
Un saludo
-
Feb221 Comment
No me gusta el Eclipse. No me gusta nada. Más bien, se podría decir que lo odio. ¿Por qué? Pues por cosas como estas:
El error es tan descriptivo que no se ni siquiera por qué peta. “El sistema no puede encontrar la ruta especificada”. ¿¿La ruta de qué?? Me caguen’ti, Eclipse.
Un proyecto que hace 1 día funcionaba sin problemas, y ahora de la noche a la mañana, sin tocar NADA, petas? Como diría “Marcial”: “Veste a la meirdaaaaaaaaaaaa”
Eclipse: Veste a la mierda!!!!!!!Así que me ha tocado borrar el Eclipse y volver a instalar todo, configurarlo y cargar los proyectos que tenia antes. El Netbeans no saba tantos problemas!
-
Feb20No Comments
Ayer me compre, junto con R2d2rigo, la primera entrega de la nueva promoción de Ubisoft. Por 10€, me compré los siguientes juegos:
Far Cry 2: Fortune’s Edition: 30€
Splinter Cell: Chaos Theory: 10€
World in conflic + expansion: 30€ + 15€
En total hubiera salido por unos 85€ (comprando todos los juegos por Steam, que es de donde he mirado los precios), y de esta forma salen los 3 por 10€. Lo veo una muy buena oferta. Además, todos los juegos vienen con sus claves para jugar online.
Hay gente que dirá: pues vaya juegos más malos. Bueno, puede que no sean lo mejor de lo mejor, pero como iniciativa está muy bien. A ver si las demás compañías toman ejemplo, jejeje
Es que si los juegos fueran más baratos, más gente compraría juegos originales.
Toda la colección en http://www.codegamecoleccion.com/
-
Feb101 Comment
Que no estaba muerto, que solo estaba de parranda, XD
En mi ausencia, fue presentado el iPad. Iba a ser una revolución. Esperaremos a ver como acaba, pero no le veo mucho futuro yo al trasto este. Y viendo cosas como esta, parece que no soy el único:

FUENTE: http://www.geekool.com
-
Feb21 Comment
Estoy pensando en irme de Erasmus el año que viene. Asi que me he pueto a hacer un mapa con los destinos a donde me puedo ir. Es solo para informatica del año 2010, pero a lo mejor os srive.
La url del mapa es: http://maps.google.es/maps/ms?f=q&source=s_q&hl=es&geocode=&ie=UTF8&msa=0&msid=118131694586991893817.00047e9f9151d16d009ca&ll=52.268157,14.985352&spn=21.376829,64.467773&z=5
Un saludo
-
EneNo Comments31
-
Ene28No Comments
Ya está disponible para descargar el video del webcast de ayer. Para poder verlo o descargarlo, tenéis que meteros en este enlace: http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032438966&Culture=es-ES
Recordar que los materiales podéis bajarlos de aquí: http://nosoyfriky.es/pub/WebcastSOLUCION.zip
Un saludo
-
Ene27No Comments
Se acerca la hora del webcast y para aquellos que quieran, voy a dejar los materiales con los que voy a hacer el webcast.
http://nosoyfriky.es/pub/Materiales.zip
En este fichero tienes:
- Diapositivas usadas en el webcast .
- Plantilla C# para el programa que vamos a hacer, que ya os adelanto que va a ser una agenda de contactos para gestionar tus amigos, ;- D
De todas formas, te recomiendo estar atento a la explicación y depuse que te pongas tu poco a poco a hacer lo mismo que he hecho yo en el webcast. Lo digo porque si te pones a picar código mientras explico, posiblemente te pierdas.
********************************************************************************************************************
Además, por si no quieres esperar, también te dejo disponible este otro archivo:
http://nosoyfriky.es/pub/WebcastSOLUCION.zip
En este otro tienes:
- Diapositivas usadas en el webcast con anotaciones.
- Código fuente de la agenda comentada.
Si tienes alguna duda, puedes enviarme un mail a la dirección de correo que aparece en las diapositivas o bien usando este formulario de contacto. También puedes proponerme otro tema para futuros webcast, como “Windows Forms”, “Acceso a Base de Datos”, etc…. y veré que se puede hacer.
Un saludo.
-
Ene25
Vótame! Te prometo Lacasitos si gano, XD
Filed under: General;No CommentsPara la gente que no lo supiera, estoy inscrito en el concurso de blogs de la UA. Si te gusta mi blog, o si eres amigo, o simplemente lo haces por los Lacasitos, puedes votarme en esta web: http://blogs.ua.es/vota/
Selecciona “No soy Friky” en la categoría “General”, escribe tu correo y dale a “Enviar votos”. Te enviaran un correo para confirmar el voto (vamos, para que no hayan trampas, o al menos trampas muy descaradas).
Puedes votar hasta 3 blogs, pero si quieres solo puedes votar a 1, o a 2.
Gracias!
PD: Si gano, recordarme lo de los Lacasitos, XD

Últimos Comentarios