Kleines Problem mit einem 2D-Spiel (Kollisionsabfrage)
-
Hi,
hab da ein kleines Problem mit nem 2D-Game von mir. Und zwar klappt die Abfrage, ob eine meiner Kugeln den Gegener getroffen hat nicht wirklich.
Die Gegner sind dynamisch erstellte TImage-Objekte mit nem Bitmap drin, die ich wie folgt erstellt habe.TImage *enemy[5]; //Habe ich jedoch global in der Header- //Datei der Unit deklariert for(int h = 0; h < 5; h++) { enemy = new TImage(this); enemy->Parent = this; enemy->Picture->Bitmap = NewImage; enemy->Transparent = true; }Die Kugeln hab ich nach dem gleichen Schema erstellt jedoch mit 7 Elementen anstatt 5. Die Kugeln, sowie die Gegner werden alle bei Programmstart erstellt.
Die Kugeln befinden sich dann unsichtbar und disabled auf der Oberfläche.Die Animation der Kugeln und die Kollisionsabfage mit dem Gegner sieht so aus.
void __fastcall TZombie::bullet_flyTimer(TObject *Sender) { for(k = 0; k <= ammo; k++) //ammo = Anzahl der abgefeuerten Kugeln { if(bullet_dist[k] >= 40) { bullet[k]->Visible = false; bullet[k]->Enabled = false; } else { xneub[k] = (bulletpos[k].x) + (-1 * r) * sin(phirad * n_bullet[k]); xneub[k] += 0.5; bulletpos[k].x = int (xneub[k]); yneub[k] = (bulletpos[k].y) + (-1 * r) * cos(phirad * n_bullet[k]); yneub[k] += 0.5; bulletpos[k].y = int (yneub[k]); bullet[k]->Left = bulletpos[k].x; bullet[k]->Top = bulletpos[k].y; for(j = 0; j < 5; j++) { //Kollisionsabfrage if((bullet[k]->Left >= enemy[j]->Left && bullet[k]->Left <= (enemy[j]->Left + enemy[j]->Width)) && (bullet[k]->Top >= enemy[j]->Top && bullet[k]->Top <= (enemy[j]->Top + enemy[j]->Height)) && bullet[k]->Visible == true) { enemy[j]->Visible = false; } } } bullet_dist[k]++; //wird erhöht nach jedem Positionwechsel } }Der Timer läuft ständig im Hintergrund. Das ganze hat bis jetzt ohne die Kollisionsabfrage super funktioniert.
Ist zwar ein bisschen durcheinander, aber ich hoffe jemand macht sich die Mühe und hilft mir bei der Fehlersuche.
Gruß und Danke im Vorraus
Boneless