Meteorit 003

Hola mundo xna

Me ha costado 1 hora o asi pero ya he conseguido un hola mundo xD, aqui detallo los pasos
1. Crear un proyecto tipo Windows Phone Game (Framework 4.0)
2. Abrir el archivo Game1.cs y añadir la libreria Microsoft.Xna.Framework.Graphics; (con el using delante en el inicio del codigo) (esto es para poder llamar a SpriteBatch)
3. Ir a WindowsPhoneGame1Content y boton derecho, Add, New Item. Seleccionar Sprite Font y Add. (Es obligatorio cargar fuentes para todo lo que hagamos, por eso cargamos la default)
4. Ir al metodo draw en Game1.cs y crear un SpriteBatch con esta linea. SpriteBatch spriteBatch = new SpriteBatch(GraphicsDevice);
5. Iniciar el SpriteBatch con spriteBatch.Begin();
6. Mostrar la string por pantalla con spriteBatch.DrawString(Content.Load(«SpriteFont1»), «Hola mundo», new Vector2(0, 0), Color.White);
7. Finalizar el SpriteBatch con spriteBatch.End();

Explicacion de los parametros de DrawString
1. Fuente. No puede ser null ni hay fuentes ya cargadas, se tienen que cargar de los resources del proyecto, por eso se usa Content.Load(nombre) para cargar esa fuente.
2. String. La string que se mostrara.
3. Posicion. Posicion en pantalla desde donde empezara el texto, yo he creado un Vector2(0, 0) que posiciona el texto en la coordenada (0,0) empezando por la esquina superior izquierda.
4. Color. He puesto color de texto blanco; al poner Color os saldra la lista de los que podeis poner.

PD: Al final no estamos usando layouts en xml, aunque la descripcion de la fuente, por ejemplo, si que es con xml; asi que es probable que se pueda portar facilmente a xbox/win.
PD2: No es lo mismo phone game que phone app, en phone app se usan los layouts y en phone game no.

Meteorit 002

Ya he acabado de leer los pdfs, estas son las cosas mas importantes que he encontrado y difieren de lo que ya sabiamos:

– convert para castings (tambien funciona (int))
Ejemplo: double angulo = Convert.ToDouble(entero); //siendo int entero;
Ejemplo: Button buttonEmisor = (Button)emisor; //siendo Object emisor;

– foreach
Ejemplo: foreach(string disco in discosLogicos) { } //siendo discosLogicos un vector de strings
Ejemplo: int[10] vector; foreach(int a in vector) { } //recorrido del vector de principio a fin sin iteradores

– setters y getters (propiedades)
Ejemplo: public string Nombre { get{return nombre;} set{nombre = value;} } //siendo string nombre; un atributo privado, explicacion de value abajo
Ejemplo: a.Nombre = «yo»; string b = a.Nombre; //ejemplos de llamadas a set y get respectivamente. «yo» seria el objeto «value» asignado en el set

– herencia con :
Ejemplo: public class MiClase : ClaseBase { } //siendo public class ClaseBase { } la superclase

– interface con :
Ejemplo: public class MiClase : Interfaz { } //siendo interface Interfaz { } una clase interface

– namespaces (package en java). Se usa para acceder si se empaqueta en un .dll
Ejemplo: namespace Proyecto1{ public class Hola { } }
Ejemplo: using Proyecto1; Proyecto1.Hola a = new Proyecto1.Hola(); //ejemplos de carga del namespace y llamada al constructor (si no se ha cargado) respectivamente

– Console.WriteLine(«{0}», parametro); para salida estandar, similar a c; tambien funciona Console.WriteLine(cadena) siendo string cadena; tambien existe Console.Write, el cual no hace salto de linea
Ejemplo: Console.WriteLine(«Me llamo {0} y soy {1}», nombre, caracteristica); //siendo {0} el primer parametro (nombre) y {1} el segundo (caracteristica)
Ejemplo: «Me llamo Cerb y soy osom» //ejemplo de ejecucion con nombre = «Cerb» y caracteristica = «osom»

– para sobreescribir metodos si a priori no se sabe k se van a redefinir -> usar «new» entre public y el tipo en la cabecera de la funcion (clase derivada)
Ejemplo: public new metodo () { } //siendo metodo() un metodo heredado que se definio normal en su clase

– si se sabe entonces -> declarar metodos como «virtual» para marcar k seran redefinidos (clase base), al sobreescribir se pondra «override», siempre entre public y el tipo en la cabecera
Ejemplo: public virtual metodo() { } //implementacion del metodo metodo() en la clase base
Ejemplo: public override metodo() { } //sobreescritura del metodo metodo() heredado de la clase base, el cual se sabia que se podia sobreescribir

– palabra reservada «base» para hacer referencia a la clase base (como el this hace referencia a la clase en uso) (equivalente a super en java)
Ejemplo: public class ClaseBase { string atrib; } //estructura de la clase base
Ejemplo: public class MiClase : ClaseBase { MiClase() { string a = base.atrib; } } //llamada al atributo atrib de la clase base

– eventos: cada componente(button, textbox, etc) tendra una propiedad para asignarle un manejador de eventos
Ejemplo: buttonAceptar.Click += new EventHandler(ButtonAceptarClick); //siendo Button buttonAceptar; se le asigna un manejador al evento click

– eventos: en la misma clase habra un metodo que maneje el evento generado
Ejemplo: static void ButtonAceptarClick(object sender, EventArgs e) { } //implementacion del evento click, puede llamarse desde varios componentes

– palabra reservada «partial» en la cabecera de la clase para implementar la clase en varios archivos, se usa para dividir diseño de componentes de la logica
Ejemplo: public partial class MiClase { MiClase() { Button a = new Button(); } } //parte que genera componentes y propiedades (como los layouts en xml)
Ejemplo: public partial class MiClase { } //parte que implementa la logica de dichos componentes y otras funciones

Meteorit 001

Aun sigo leyendo los pdfs para aprender c#, algunas cosas son distintas pero en general es como c++ y java
Despues tengo que leer http://create.msdn.com/en-us/education/quickstarts para app dev en windows phone o la docu completa http://create.msdn.com/en-us/education/documentation
Al mismo tiempo ire probando como scrollear el fondo de la pantalla, mirando ejemplos y probando yo mismo.
Aun no se si se usaran layouts xml o eso es solo para apps, si no se usan tendriamos mejor portabilidad a xbox360