1 svar
124 visningar
Oskillz 15
Postad: 3 mar 2017 18:25

Hantera kollision och målpositioner för olika sorters objekt i samma klass

Jag har början på ett tank spel med en tank klass och i den vill jag kunna välja vilket mål tanken ska köra mot beroende på vilket state som är mest aktivt (detta ska bli en Fuzzy state machine för AI är det tänkt).

Jag har några pickups som är egna klasser, health och ammo bland annat, men hanteringen för kollisionen mellan mina pickups och min tank gör jag i Game1 (main klassen) eftersom att det är där jag skapar instanserna.

Jag sätter även riktningen mot tankens mål i Game1 genom att anropa en metod för tank som tar emot målets position, men jag skulle vilja kunna göra det i tank klassen istället.

 

Jag behöver alltså något smidigt sätt för tank klassen att kunna hålla reda på positionerna/hitboxarna för de andra objekten (även andra tanks och deras målpositioner). Det sätt som jag på rak arm kan komma på är att skicka med alla andra objekt i konstruktorn för tanken och ha privata instansvariabler för dom i tank klassen. Men det känns som en dålig lösning som snabbt kommer bli en stor röra. 

Jag skulle ju helst bara ha en vektor variabel i tank klassen som jag kan sätta till någon av dom andra objektens position. 

Porchy 21
Postad: 19 apr 2017 21:24

Personligen så skulle jag ha löst det du vill göra genom en övergripande struktur som hanterar Objekten i världen (fysikmotor).

Du kan skapa ett generellt objekt innehållandes:

class Object2D/3D {
    2D/3D-Vektor Position;
    float Radie;
}

Värt att notera är om du vill ha olika andra kollisioner än en cirkel/sfär så får du implementera en "Collider" class som ett Object2D/3D innehåller.

Sen kan du ärva från den här klassen och skapa specifika klasser som ex:

class Tank: public Object2D/3D {
    int Health = 100;
    int Ammo = 0;
}

Det är sen bra att ha en liten fysikmotor som sköter hanteringen av allting och interpolerar dina tanks mot deras target etc...
Den här fysikmotorn bör ha en lista med alla skapade Object2D och vid kollision göra något.. Exempelvis genom att du sätter callbacks eller hårdkodar vad som händer.

Fysikmotorn bör även interpolera mot alla tanks målposition med jämna intervall. 

PS: Kodar inte i C# så syntaxen kan vara helt fel

Mvh

Svara Avbryt
Close