C# XNA - Problem med Vector2 property

Permalänk
Medlem

C# XNA - Problem med Vector2 property

Jag har en property som ni kan se i koden nedan. Denna property:s enda syfte är att göra så rektangeln collisionRectangle uppdateras automatiskt varje gång Vector2 variabeln position ändras. Mitt problem är att property:n endast låter mig ändra position variabeln genom att skicka en hel Vector2 till den, om jag försöker ändra en koordinat så blir det error. Exempel, rad 1 funkar inte, rad 2 funkar:

Position.X = 7 //Error Position = new Vector2(7,0)

Vector2 position; public Vector2 Position { get {return position;} set { position = value; collisionRectangle = new Rectangle((int)position.X, (int)position.Y, (int)(frameSize.X * scale), (int)(frameSize.Y * scale)); } }

Permalänk
Medlem

Upptäckte att detta inte kan lösas och är något man för leva med om man gör en Vector2 property.

Permalänk
Medlem

Alltså, i den första "klumpen" där kan du ju inte ändra xvärdet på en variabel som du inte redan har deklarerat.

Visa signatur

Corsair Obsidian 250D | i5 7600K | Gigabyte Z270N WiFi | Samsung 960 EVO 250GB | Fractal Design Integra M 650W | Corsair Hydro H90 |Kingston 8GB 2133M DDR4 CL14 | Asus GeForce GTX 970 4GB STRIX DC2 OC MAX |

Permalänk
Medlem

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.