Permalänk

Kollisionshantering

Gör ett spel i C#, men har fastnat lite när det kommer till kollisionshanteringen.
Här ser ni hur jag hanterat koden om en Rectangle kolliderar med en annan.

if (IntersectPixel(carRectangle, carTextureData, angrymanRectangle, angryManTextureData)) { System.Windows.Forms.MessageBox.Show("Sorry you have lost. Play again! Your score: " + points); System.Windows.Forms.Application.Exit(); }

Det jag vill göra är att skriva ut samma "angryman" textur/bild och få in samma kollisionshantering på den. Behöver jag då skapa en ny rectangle för den texturen?

Här ser ni hur en ny sprite målas ut när ett visst poäng tillkommer. Vill att flera av dessa ska målas i sammanhang med att poängen ökar.

if (points > 299) { spriteBatch.Draw(angryManTexture, angrymanPositionThree, Color.White); angrymanAttackThree(); }

Jag måste ju förmodligen skapa något nytt för att kollisionsklassen ska förstå vilka sprites som ska reagera vid kontakt? Vet inte om jag yttryck mig väl här men har förklarat så gott jag kan.

Tack!

Visa signatur

Jaaa men just precis.

Permalänk
Medlem

Känns som att du borde gå igenom C# -tutorialen på MSDN. Om du vet hur man använder t.ex. Klasser, List<datatyp>(), och hur for-loopar fungerar så blir det nog väldigt mycket klarare.

Man ska skapa "objekt" som representerar allt du vill ha i spelet. Och sedan gör du funktioner till dessa så allt fungerar snyggt. T.ex.:

if( points == 300 && first300) { first300 = false; Color color = Color.Red; float showtime = 3.0f; float fadetime = 1.0f; textHandler.addTextItem("300 POINTS!!", showtime, fadetime, color); }

Där textHandler har en publik statisk funktion som skapar ett objekt och lägger in det i en statisk List<TextItem> liTextItem. Och sedan så får du se till att textHandler gör allt som den borde göra för att texten ska visas i 3 sekunder och blekna bort den sista sekunden.

T.ex.

textHandler.update(); enemyHandler.update(); player.update();

Och att sedan i textHandler klassen:

public static void update() { for( int i = liTextItem.count - 1; i > -1; i--) // går baklänges så man kan ta bort objekt när man går igenom den. { if( liTextItem[i].update() == -1) // update() ska returnera -1 om showtime < 0; { liTextItem[i].destroy(); liTextItem.remove(liTextItem[i]); } } }

Bara som lite inspiration...