martes, 31 de marzo de 2009

Escribir texto con XNA.

Cargar textos en pantalla es muy sencillo con XNA, pero no por ello vamos a obviarlo. Cuando acabes esté tutorial verás que es muy parecido a cargar un gráfico, el sistema es el mismo, cargamos la fuente en el método Load y luego lo dibujamos en el método Draw.
Lo primero que tienes que hacer es crear un nuevo fichero que contenga las características de la fuente (tipo de letra, tamaño…); Para ello agregamos un nuevo elemento del tipo Sprite Font. Lo creamos en la carpeta de contenidos “Content”.

addnewitem

addsprite

Ahora lo vamos a dejar tal y como viene por defecto, pero puedes cambiar el tipo de letra, el tamaño o cualquiera de las propiedades de la fuente.
Ahora tienes que definir una variable a nivel de clase de tipo SpriteFont donde almacenaremos la fuente, acto seguido en el método LoadContent la cargaremos en el proyecto, tal y como hacemos con las imágenes.
[code language="csharp"]
SpriteFont texto;
[/code]
[code language="csharp"]
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);

texto = this.Content.Load("fuente");

// TODO: use this.Content to load your game content here
}
[/code]

Por último en el método Draw hacemos que se “pinte” en pantalla utilizando DrawString.
[code language="csharp"]
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);

Vector2 posicionTexto=new Vector2(200,300);

spriteBatch.Begin();
spriteBatch.DrawString(texto,"Desarrollo XNA, mostrando texto en pantalla.", posicionTexto,Color.White);
spriteBatch.End();

base.Draw(gameTime);

// TODO: Add your drawing code here

base.Draw(gameTime);
}
[/code]

Como has podido comprobar es muy sencillo escribir texto en un juego XNA, muy pronto escribiré un tutorial para trabajar con textos en C# y de esta forma ampliaremos un poco mas este tutorial.
Como siempre, aquí puedes descargar el código.
See you!

miércoles, 25 de marzo de 2009

Jugar con juegos creados con XNA en Internet

Esto que os voy a contar sencillamente me pone; hace algún tiempo que pensaba que tarde o temprano algo así aparecería, pero es que hace relativamente poco que SilverLight 2 está en versión definitiva, así que lo esperaba para dentro de bastante más tiempo.
SilverSprite permite portar nuestros juegos creados con XNA, los que están en 2D, claro, a SilverLight, por lo tanto podremos jugar desde un explorador en Internet.
En una época en la que los juegos en Flash están pegando realmente fuerte, a SilverLight le estaba costando mucho entrar en juego, así que este será un pequeño gran empujón y espero que muy pronto se empiecen a ver juegos en Internet creados con XNA.
Aquí os dejo unos links para que veáis lo que se puede conseguir:

Y mientras babeo con el tema, el fin de semana lo probaré y os contaré mi experiencia.

silverlight

domingo, 22 de marzo de 2009

Sección enlaces actualizada.

Quiero aprovechar esta entrada para recomendaros que le echéis un vistazo a la sección de enlaces, que voy actualizando de vez en cuando, además me gustaría que me recomendaseis vuestras página favoritas para ir haciendo más grande la lista (quiero ser el que la tiene más grande, la lista de enlaces, claro)
Vamos al grano, que me enrollo, ayer me entere de que mi amigüito Garrin ha decidido escribir un blog sobre .Net, uno más pensarás, pues posiblemente, lo que pasa es que si te gusta programar no te lo puedes perder por que este tío es un crack. Así que ya sabes, si te gusta el tema, DEV GARRIN.

Truco: Eliminar Usings innecesarios.

Hoy os voy a explicar un pequeño “truco” o utilidad que podemos usar con el Visual Studio 2008 o Visual C# 2008; Consiste en eliminar todos los Using ue no se usan y ordenar los que sí.
Cuando creamos un proyecto nuevo o un fichero desde según que plantillas, se crean por defecto una serie de Using que no usamos o usaremos, esto en realidad no afecta para nada al rendimiento del programa o juego que estamos creando, ya que cuando compilemos se obviaran, pero por cuestión de “estética” o facilidad a la hora de leer el código puede ser una buena práctica “limpiar” la zona de “using”.

using

domingo, 15 de marzo de 2009

Guitar Hero World Tour - B.Y.O.B 100% en experto

Como hace mucho que no actualizo y hasta mañana o pasado no colgaré un nuevo tutorial, aquí os dejo este video para que lo disfrutéis tanto como yo:





lunes, 2 de marzo de 2009

C#. Propiedades

Muchas veces nos puede interesar almacenar datos para después poder usarlos, y como vimos en el capitulo anterior, para esto usamos las variables. Pero, ¿Qué pasa si queremos aplicar algún tipo de lógica a estas variables? Me explico, imagina que quieres que el número máximo de vidas en tu juego sea cinco, y no quieres que nunca se puedan tener más de cinco vidas. Si tenemos una variable que almacene el número de vidas tendríamos algo como esto:
[code language="csharp"]
int vidas;
[/code]

Ahora cada vez que algún evento del juego sume una vida al total que ya tenemos, tendríamos que ir comprobando que no tengamos ya cinco vidas:
[code language="csharp"]
if(vidas < 5) vidas++;
[/code]
Esto lo tendremos que comprobar cada vez que queremos sumar una vida, es posible que en alguno de los eventos que suma una vida se nos olvide la comprobación, además de que es un poco “engorroso” tener que picar el código cada vez.
Para esto tenemos las propiedades, ya que entre otras cosas nos permite tener una lógica antes de obtener o asignar un valor.
Otras cosas que son de gran utilidad en las propiedades es que podemos hacerlas de lectura/escritura, solo lectura o solo escritura, y son perfectas para exponer de manera pública los valores de una clase.
Las propiedades se declaran dentro del bloque de clase especificando el nivel de acceso del campo, seguido por el tipo de la propiedad, seguido por el nombre de la propiedad y, a continuación, un bloque de código que declara el descriptor de acceso get y/o el descriptor de acceso set.
Vamos a ver un pequeño ejemplo para que lo veas claro:
[code language="csharp"]
Private Uint16 _vidas; //variable privada
Public Uint16 vidas
{
get{return _vidas;} set{_vidas = value;}
}
[/code]

El nivel de acceso es Public, por lo que todas las clases podrán acceder a esta propiedad, el tipo es UInt16, porque vamos a almacenar números pequeños sin decimales y positivos, y después tenemos los bloques de código get y set. El bloque de código get sirve para acceder al valor y el bloque de código set sirve para asignar el valor, si queremos hacer la propiedad solo de lectura pondremos solo el get y si la queremos hacer solo de escritura solo pondremos el set. El parámetro value está implícito en la propiedad y contendrá el valor que le asignemos, por lo tanto, si hacemos vidas = 1, el parámetro value vale uno.
Sigamos con el ejemplo del principio, lo que haríamos sería asignar la lógica a la propiedad de este modo:
[code language="csharp"]
Public Uint16 vidas
{
get{return _vidas;}
set
{
if(vidas < 5) _vidas++;
}
}
[/code]

Por lo tanto, aunque sumemos todas las veces del mundo las vidas, si ya se tienen cinco, estas no variaran.
Poco a poco iras viendo que las propiedades son algo muy utilizado en la programación de tus juegos, y si observas los códigos ya publicados podrás ver que se utilizan mucho, sobre todo para exponer valores a lo largo de las distintas clases del juego.
Ver ejemplos de propiedades.