Meteorit 008

Aclaracion importante del foreach y el for:
Si en el foreach se borran elementos de ese mismo vector recorrido petara porque se altera la cantidad de elementos en el vector, es obligado usar for
Ejemplo:
foreach(Proyectil bala in balas) balas.Remove(bala) <- Peta
for(int i = 0; i < balas.Count; i++) balas.Remove(balas[i]); <- No peta

Aclaracion importante del rectangulo de colisiones:
Cada vez que movemos algo que queramos que colisione tenemos que mover tambien su rectangulo, para ello cada metodo que mueva (Update para npcs y Mover para nave) reestablecera la localizacion del rectangulo, dejando su anchura y altura igual que en la declaracion.
Ejemplo:
colision2.Location = new Point((int)bala2.Posicion.X, (int)bala2.Posicion.Y);

Aclaracion importante de la posicion de objetos:
El vector de posicion de sprite es Vector2 con X e Y float, por eso hay que castearlo a int cuando queramos dibujar en pantalla, porque no existe el pixel 1’5. Pero acordaos siempre de castear a int al final, cuando se haya calculado ya el nuevo valor de la variable, sino puede pasar lo siguiente…
Ejemplo (teniendo a=1’5, b=2):
c = (int)a*b; //Esto quedaria 1*2 => c = 2
c = (int)(a*b) //Esto quedaria (int)1’5*2 => c = 3
Esta tonteria si se hace mal podria hacer por ejemplo que si mueves algo pixel a pixel con una pendiente X veas que realmente adopte un comportamiento rectilineo…