Vector2 posicion es una estructura con int X e int Y. Su propiedad solo permite modificar elementos de tipo Vector2, pero no deja accesible X e Y. He encontrado 3 formas de hacer propiedades:
public Vector2 Posicion { get { return posicion; } set { posicion = value; } }
public Vector2 Posicion { get; set; }
public Vector2 Posicion { get { return posicion; } set { posicion = new Vector2(value.X, value.Y); } }
La primera seria la normal, la que enseñan en los manuales y todos deben saber.
La segunda parece que es una forma abreviada. No se si hace exactamente lo de arriba pero funciona igualmente, el problema es que sale warning porque «posicion» no se ha usado.
La tercera se parece a lo que buscamos pero no es, la he visto en codigos de ejemplo pero no la he testeado, en algun contexto podria ser util.
Me decanto por hacer un metodo set para X y para Y como toda la vida. Puede resultar un poco engorroso al usarlo pero la otra solucion seria hacerlo public…
public void setPosX(int X) { posicion.X = X; }
public void setPosY(int Y) { posicion.Y = Y; }
Y ejemplo de llamada: bala.setPosX(180); en lugar de bala.Posicion.X = 180; que NO funcionaria.