Declaracion de la clase Background
Atributos:
– const RESOLUCION_HORIZONTAL = 800; Esto deberia ser lo tipico de precompilador #define y tal, pero c# no permite hacer esto, asi que la pongo dentro de la clase. Es la constante que recoge el ancho de la pantalla, que se supone k siempre sera 800…
– bool reproduciendo; True -> Fondo scrolleando. False -> Fondo pausado.
– int numeroFondoActual; Es un entero k va incrementandose conforme cargamos fondos, para saber cuando parar de cargar.
– string resourceName; Contiene el nombre exacto de la parte comun del nombre de los fondos que se quiere cargar. Es decir si los fondos son «Fondo1.1, Fondo1.2» esta variable sera «Fondo1.»
– int numeroFondos; Numero total de fondos a cargar.
– Sprite fondoA; Sprite que contiene el primer fondo a cargar.
– Sprite fondoB; Sprite que contiene el segundo fondo a cargar.
//Esta preparado para cargar siempre 2 fondos, pero tambien funciona si quieres scrollear solo 1 fondo, pasandole por parametro al constructor numeroFondos = 1, aunque se cargara un fondo NULL a su derecha
Constructores:
– Background(string resourceName, int numeroFondos) Pasarle por parametro la cadena k identifica a los fondos y el numero de fondos a cargar
Metodos:
– Reproducir() Pone a true el bool reproduciendo
– Pausar() Pone a false el bool reproduciendo
– DibujarImagen(Sprite fondo) Muestra en pantalla el Sprite pasado por parametro (necesita acceso a un spriteBatch, k nosotros tenemos global en la clase estatica GestorContenidos)
– Draw() Metodo draw que llama a DibujarImagen con fondoA y con fondoB
– Update(int velocidad) Logica del background scrolling, por parametro se le pasa el numero de pixels que se movera cada vez que se llame a este metodo.
Para usar la clase se creara un fondo -> Background fondo;
Luego se instanciara con los identificadores y el numero de fondos -> fondo = new Background(«Fondo1.», 6);
Y luego se llamara a update para moverlo (en este ejemplo se mueve 16 pixels cada 1 segundos) -> if(gameTime.TotalGameTime.Seconds % 1 == 0) fondo.Update(16);
PD: NO es recomendable pasar mas de 1 por parametro en la velocidad, porque si se mueve de 3 en 3 por ejemplo y el ancho de la imagen no es multipo de 3, entonces se pintara en pantalla pixels k se salen de la imagen. Lo mejor es variar los segundos k transcurren hasta volver a llamar al metodo, y llamarlo con 1, para k vaya pixel a pixel. Lo he implementado asi para hacer pruebas, aunque es totalmente funcional siempre que se usen cantidades potencia de 2 -> 1, 2, 4, 8, 16, 32, 64, etc.