C++ Allegro Kollision

09/30/2010 20:59 Proace#1
Hallo,
Ich habe angefangen ein Jump and Run Spiel mit der Allegro libary zu schreiben.
Bei jedem gutem Jump and Run sind natürlich kollision vorhanden. Bisher arbeite ich mit einer einfachen, aber umständlichen und leistungsfressende variante.
Er prüft nach jeden schritt, ob eine kollision vorhanden ist, auch wenn er meilen weit davon entfernt ist. Das sieht wie folgt aus:

Code:
x1= x von der Figur
y1= y von der Figur

x2= x von dem Stein
y2= y von dem Stein

int BildKollision(BITMAP* Figur,int x1, int y1, BITMAP* stein,int x2, int y2)
{
    if(x1>=(x2+stein->w) || y1>=(y2+stein->h) || x2>=(x1+Figur->w) || y2>=(y1+Figur->h)) return 0;
    else                return -1;
}

Nun wollte ich fragen, ob es eine bessere Variante gibt, um zu prüfen ob eine Kollision stattfindet. Aus einem Forum hab ich gelesen, dass man mit einem int array eine Map schreibt mit 0,1. Heisst 0 = nichts, 1= Stein.
Das würde dann so aussehen
( 1,0,0,0,0,1
1,0,0,0,1,1
1,0,0,1,1,1
1,1,1,1,1,1)

Wenn einer damit erfahrung hat, oder selbst schonmal ein Plattform game geschrieben hat, würde ich mich freuen, wenn er ein kleines beispiel hier reinschreibt.


Wenn es noch andere Varianten der kollision gibt, lasst es mich bitte wissen.

Mfg Proace
09/30/2010 23:33 .nAno#2
Es gibt Methoden von denen ich weiss, dass es sie geben müsste bzw. die du ausnutzen könntest, allerdings wirst du dafür sehr sehr tief in die unteren Abstraktionsebenen absteigen müssten (was Allegro sicherlich nicht mitmacht).
Die Idee mit dem Array basiert auf dem selben Prinzip wie das oben genannte, allerdings kann man das mit dem Renderen der Map verbinden, wo kleinere Geschwindigkeitsprobleme nicht weiter schlimm sind (solltest du die Map in Form von Datein speichern kannst du auch gleich mit diesem Format arbeiten). Folglich würde ich dir empfehlen es damit zu probieren ;).
Eine bessere Lösung die du so auch umsetzen kannst würde mir spontan nicht einfallen