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

AyJay

Frischling

  • »AyJay« ist der Autor dieses Themas

Beiträge: 67

Beruf: Schule, Hobbys :D

  • Private Nachricht senden

1

22.04.2011, 22:52

[C++] Collision Konsequenz

Hallo Leute,
Also ich habe selber eine MINIMALE Collisions erkennung gebastelt (geht nur mit Vierecken).
Das Problem dabei ist, ich komme im moment grade total durcheinander und bin am rätzeln was dann passieren soll,
wenn der Player ein Object berührt.
Also in welche richtung der Player dann zurück gedrückt werden soll.
Schauts euch einfach mal an

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
bool Collision::MyCollision(const sf::Sprite& Object1, const sf::Sprite& Object2, sf::Sprite& Player) {
    float Obj1XL,Obj1YL, Obj2XL, Obj2YL;

    Obj1XL = Object1.GetPosition().x + Object1.GetSize().x;
    Obj1YL = Object1.GetPosition().y + Object1.GetSize().y;

    Obj2XL = Object2.GetPosition().x + Object2.GetSize().x;
    Obj2YL = Object2.GetPosition().y + Object2.GetSize().y;

    // OL = ObenLinks, OR = ObenRechts, UL = UntenLinks, UR = UntenRechts;
    int OL = 0, OR = 0, UL = 0, UR = 0;

    if(((Object2.GetPosition().x >= Object1.GetPosition().x) &&
       (Obj1XL >= Object2.GetPosition().x)) &&
      ((Object2.GetPosition().y >= Object1.GetPosition().y) &&
       (Obj1YL >= Object2.GetPosition().y)))
    {
        OL = 1;
    }

    if(((Obj2XL >= Object1.GetPosition().x) &&
       (Obj1XL >= Obj2XL)) &&
      ((Object2.GetPosition().y >= Object1.GetPosition().y) &&
       (Obj1YL >= Object2.GetPosition().y)))
    {
        OR = 1;
    }

    if(((Object2.GetPosition().x >= Object1.GetPosition().x) &&
       (Obj1XL >= Object2.GetPosition().x)) &&
      ((Obj2YL >= Object1.GetPosition().y) &&
       (Obj1YL >= Obj2YL)))
    {
        UL = 1;
    }

    if(((Obj2XL >= Object1.GetPosition().x) &&
       (Obj1XL >= Obj2XL)) &&
      ((Obj2YL >= Object1.GetPosition().y) &&
       (Obj1YL >= Obj2YL)))
    {
        UR = 1;
    }
    if(OL == 1 && OR == 1){
        //In Richtung Drücken Player.Move(?,?);
    }
    if(OL == 1 && OR != 1){
        //In Richtung Drücken Player.Move(?,?);
    }
    if(OL != 1 && OR == 1){
        //In Richtung Drücken Player.Move(?,?);
    }

    if(UL == 1 && UR == 1){
        //In Richtung Drücken Player.Move(?,?);
    }
    if(UL == 1 && UR != 1){
        //In Richtung Drücken Player.Move(?,?);
    }
    if(UL != 1 && UR == 1){
        //In Richtung Drücken Player.Move(?,?);
    }

    return 1;

}


Danke schonmal für die Hilfe! :)
LG,
Jason.

C-/C++-Quelltext

1
2
3
While(!asleep){
    sheep++;
}

moritz31

Treue Seele

Beiträge: 259

Wohnort: Hessen

Beruf: Student

  • Private Nachricht senden

2

23.04.2011, 12:53

keine Ahnung woran das liegt, fang auch gerade erst mit Kollisinen an,
sieht für mich aber ihrgendwie komplizierter aus als es ist

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

3

23.04.2011, 13:48

Das ist alles etwas seltsam. Du prüfst die Kollision zweier Objekte und willst dann aber den Spieler bewegen und nicht die Objekte, die miteinander kollidieren? Ich persönlich verstehe auch das ganze OL, OR, UL, UR nicht so recht. Für ein einfaches Kollisionsvehalten würde ich einfach schauen, wo findet die Kollision statt(Oben, unten, rechts, links) und das würde ich dann dem kollidierenden Objekt mitteilen und dieses Objekt kann dann anhand seiner Geschwindigkeit, seiner Masse etc. zurückstoßen, bremsen oder was auch immer.

AyJay

Frischling

  • »AyJay« ist der Autor dieses Themas

Beiträge: 67

Beruf: Schule, Hobbys :D

  • Private Nachricht senden

4

23.04.2011, 14:10

ObenLinks
ObenRechts
UntenLinks
UntenRechts

Sind ja viereckige objecte der Player auch, Object1 ist z.b Wand/Boden, Object2 der Player.
Nun wurde geschaut aub sich alle vierecken die koordinaten im bereich des Object1 sich befinden wenn ja wird diese
bestimmte ecke mit 1 bestückt sonst bleibt sie 0 wie beim definieren

C-/C++-Quelltext

1
2
3
While(!asleep){
    sheep++;
}

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »AyJay« (23.04.2011, 14:17)


5

23.04.2011, 21:54

nimm einfach stadt or ol ur ul ein oben, unten, links, rechts und berechne so ob das objekt eher oben unten links oder rechts ist.
(dann weist du auch in welche richtung du gehen musst)

dann würde ich dir raten sadt integer variablen boolean variablen zu verwenen, da die sowiso nur aus 1 oder 0 bestehen und weniger arbeitsspeicher verbrauchen.

und wenn objekt2 auch player ist, wiso brauchst du dann ein objekt1, ein objekt2 und einen player? es würden ja ein objekt1 und ein objekt2 bzw ein objekt und ein player reichen

Zitat

Basically, there are only 10 types of people in the world. Those who know binary, and those who don't.

Werbeanzeige