Collision-Detection Methoden in C++
Ich bin neu in c++ und ich praktiziere seit Kollision in einem kleinen Spiel-Programm, das nichts tut und ich einfach nicht die Kollision Recht
Also ich benutze geladenen Bilder in Variablen
background = oslLoadImageFile("background.png", OSL_IN_RAM, OSL_PF_5551);
sprite = oslLoadImageFile("sprite.png", OSL_IN_RAM, OSL_PF_5551);
bush = oslLoadImageFile("bush.png", OSL_IN_RAM, OSL_PF_5551);
Während es in der Variablen gespeichert, wie
sprite->x = 3;
if ( (sprite->x + spritewidth > bush->x) && (sprite->x < bush->x + bushwidth) && (sprite->y + spriteheight > bush->y) && (sprite->y < bush->y + bushheight) )
{
bushcol = 1;
}
else
{
bushcol = 0;
}
So, wenn ich eine Taste drücken
if (osl_keys->held.down)
{
if (bushcol == 1)
{
sprite->y = bush->y + 38;
}
else
{
sprite->y += 3;
}
}
if (osl_keys->held.up)
{
if (bushcol == 1)
{
sprite->y = bush->y - 23;
}
else
{
sprite->y -= 3;
}
}
if (osl_keys->held.right)
{
if (bushcol == 1)
{
sprite->x = bush->x - 28;
}
else
{
sprite->x += 3;
}
}
if (osl_keys->held.left)
{
if (bushcol == 1)
{
sprite->x = bush->x + 28;
}
else
{
sprite->x -= 3;
}
}
ich dachte an Dinge wie
sprite->y = bushheight - 24;
aber es funktioniert nicht
Irgendwelche Vorschläge?
- Was genau funktioniert nicht? Außerdem, meinten Sie zu mischen, x und y in den Ausdruck sprite->y = busy->x - 3?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Sie haben die grundlegende Idee. Nur überprüfen Sie Ihre Arbeit. Hier ist eine einfache version, die kompiliert:
Ich würde vorschlagen, macht eine Funktion, die ausschließlich für den Zweck der bounding box colision detection.
Es könnte so Aussehen wie
in dem Sie die Prüfung durchführen, wenn es zu einer Kollision zwischen Bild 1 und Bild 2.
Wie für den Algorithmus, den Sie versuchen zu verwenden, check out wikipedia für Beispiel AABB bounding box
Besonders dieser Teil:
Zunächst ich nehme an, du meinst
sprite->y = bush->**y** - 3;
zweiten weiß ich nicht, welche Plattform Sie verwenden, aber oft sind die y-Koordinaten werden invertiert. d.h., y=0 entspricht oben auf dem Bildschirm. In diesem Fall vergleichen kann nicht funktionieren.
Dritten Kollision prüfen kann schnell kompliziert werden, wenn Sie hinzufügen rotation und nicht-rechteckige Objekte. Sie sollten überlegen, CGAL oder andere computergestützte geometrie-algorithmen-Bibliothek, die mit polygon-Schnittpunkt.