Anledningen varför det inte fungerar,
är för du har bara deklarerat objektet i koden,
men inte skapat ett nytt objekt av den klassen (via new) och tilldelat attributet det nya objektet.
Antingen skapa "position" i klassens konstruktor,
private Vector2 position;
public nameOfClass()
{
position = new Vector2();
}
eller då attributet deklareras:
Vector2 position = new Vector2();
Sen, angående kollisionsrektangeln. Varför skapar du en ny kollisionsrektangel varje gång positionen ändras?
Varför inte bara flytta dess x och y värde bara, bredden och höjden borde inte förändras lika ofta. Samt att bredden och höjden påverkas inte av x och y värdet (om du inte gjort en egen rektangel klass). (Tips, lägg till att skapa ett nytt objekt av Rectangle klassen i konstruktorn också)
Känns som överflödig kod, att skapa ett nytt objekt, tilldela det x och y koordinater, samt utföra bredd och höjd beräkningar och tilldela dessa.
Då man istället bara behöver uppdatera x och y koordinaten. Varje gång x och y koordinaterna ändras.
Om upplösningen förändras, skapa bara en funktion, som kallas varje gång upplösningen ändras, som då utför ny bredd/höjd beräkning, och tilldelar kollisionsrektangeln detta.
I ett inte så krävande program, så märker man kanske inte detta mycket. Men finns det väldigt många objekt av detta, så kan prestandan försämras.