Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

27.01.2011, 10:42

problem etwas einfacher gelöst ^^

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bool check_collision(WTSprite *s1, WTSprite *s2)
{   
    int x = s1->curX() - s2->curX();
    if (x < 0)
        x *= -1;
    if (x > s1->getWidth() / 2 + s2->getWidth() / 2)
        return false;

    int y = s1->curY() - s2->curY();
    if (y < 0)
        y *= -1;
    if (y > s1->getHeight() / 2 + s2->getHeight() / 2)
    
    return false;
    return true;
}

12

27.01.2011, 11:39

Also "einfacher" würde ich das ganze nicht umbedingt nennen. :huh:

Erst einmal entspricht

C-/C++-Quelltext

1
2
3
int x = s1->curX() - s2->curX();
    if (x < 0)
        x *= -1;

im Grunde diesem hier:

C-/C++-Quelltext

1
int x = abs(s1->curX() - s2->curX());

(für eine überladene Version der Funktion mit einem Funktionsparameter vom Typ float muss <cmath> inkludiert werden)

Aber was machst du, wenn die Koordinaten von deinem Sprite sich nicht auf das Zentrum des Sprites, sondern (wie meist eher üblich) auf z.B. die linke, obere Ecke beziehen. Dann brauchst du da wieder eine weitere Funktion, also bist du hier weniger flexibel. Vielleicht willst du sowieso später auch mal zwei andere Objekte auf Kollision überprüfen, die nicht von der Klasse WTSprite sind, was dann? Also übergeb besser nur das Rechteck indem sich dein Sprite befindet und dann als Referenz, statt Pointer.

Nur so als Denkanstoß. ;)

Gruß
SaRu_

13

27.01.2011, 12:02

mhh ich empfand meine lösung als die leichtere ^^

und es ist ja im grunde genommen egal ich berechne immer das objekt an sich
ich hab mir gestern die genauen koordinaten ausgeben lassen und es ist also völlig egal ob ich am oberen rand mein objekt berechne oder links unten..ich weiß ja durch die klasse welche eigenschaften meine objekte haben und mit meiner formel gehts halt immer.

mhh aber ich mach mal n neues topic..ich sitze gerade anderswo dran ^^

14

27.01.2011, 12:43

Ich habe nicht sagen wollen, dass es so wie du es gemacht hast nicht geht. Ich wollte dir nur ein paar Vorteile an "der anderen" Methode aufzeigen. Aber die wirst du auch schon noch selbst herausfinden.

Gruß
SaRu_

Werbeanzeige