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.05.2015, 11:05

Jo... SFML übernimmt wohl doch nicht die Arbeit die ich dachte. :fie:

Sobald mein Schläger schräg steht, läuft irgendwas schief. Ich versuche das mal in meinem Bild darzustellen. Der Blaue schläger ist also schräg(Um den Mittelpunkt Rotiert) und der grüne Ball fliegt gerade auf den Schläger zu. Nun Kollidiert er jedoch an der Lila Linie und wird zurück geworfen. ehrlich gesagt habe ich dieses Problem erwartet doch nicht an der Lila Linie sondern an der Roten, da dort der Mittelpunkt ist. Ich benutze die GetGlobalBounds Methode von SFML um die Bounds vom Kreis un von Rechteck zu vergleichen. Habe ich jt irgendwo nen denkfehler drin wie die Bounds sich über dei Texturen legen? Ich dachte das diese sich Passform an die Textur anpassen (ausser beim Kreis natürlich). Wie es nähmich aussieht drehen die Bounds nicht mit sonder ändern nur ihre größe bzw die Seitenverhätnisse oder?
Ich denke ich habe euch einfach nur falsch verstanden und soll diese Methode nur als Broad Phase benutzen und falss diese dann eine Kollision wiedergibt gehe ich dann in die narrow Phase und Zerfrimel das Rechteck in Lines.

Edit: woran ich gerade verzweifle... ich dachte mir das ich die Einzelnen Punkte der Strecke in einen Container Packe und sie dann in einer schleife prüfe ob, die Strecke vom Mittelpunkt des Kreises kleiner ist als der Radius. Jedoch scheitere ich schon beim Sammeln der Punkte in den Container...

Grüßte Urprimat
»Urprimat« hat folgende Datei angehängt:
  • Problem.bmp (284,44 kB - 81 mal heruntergeladen - zuletzt: 30.04.2024, 23:27)
Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.

Linus Torvalds

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Urprimat« (27.05.2015, 14:23)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

12

27.05.2015, 18:03

Damit bekommst du ein Rechteck welches deinen Körper enthält und nach den Weltachsen ausgerichtet ist. So etwas nennt man schon mal AABB (Axis Aligned Bounding Box). Wenn du das mit deinem Bild vergleichst passt das auch. Du möchtest jetzt aber ein gedrehtes Rechteckt haben.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

13

27.05.2015, 21:48

Hmm das ist Richtig aber was möchtest du mir jt damit sagen? Reicht das mit den Bouding Boxen für eine Richtige Kollisionserkennung mit einem rotierten Rechteck und ich mache nur was falsch oder soll ich sie nur als Broad Phase benutzen?
Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.

Linus Torvalds

14

27.05.2015, 23:06

Als Narrow Phase ist AABB gut. Wenn du es dann genauer willst machst du eine geeignete Broad Phase. Sprich die harten Berechnungen machst du dann in der Broad Phase natürlich.

A) Da kannst du dann deinen Ball und deinen Geschwindigkeits-Vector in den ObjectSpace des Schlägers bringen und dann Schnittpunktberechnung machen oder wie du das vorher gelöst hast. Dann solltest du das genauso abhandeln können wie vorher. Da der Schläger dann nicht mehr rotiert ist in seinem eigenen ObjectSpace, sage ich jetzt mal.
B) Oder du bleibst im WorldSpace mit Ball und Geschwindigkeits-Vector und berechnest von dort mit einer geeignete Schnittpunktberechnung gegen deinen Schläger.

Circle und rotated rectangle:
http://www.migapro.com/circle-and-rotate…sion-detection/

rotated rectangle und rotated rectangle
http://www.gamedev.net/page/resources/_/…collision-r2604

Wenn es circle und rotated rectangle ist kannst du einfach das rectangle um den radius des balls in alle richtungen größer machen (mathematisch nur) und dann den ball in den selben objectspace bringen indem sich auch der rotated rectangle befindet. Dann kannst du einen Punkt gegen einen nicht rotierten rectangle prüfen, solange du dich im objectspace befindest mit deiner ballposition.

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »TypeOverride« (27.05.2015, 23:21)


15

27.05.2015, 23:31

Hmm ich dachte das zu erst die Broad Phase kommt und dann die Narrow Phase. also das die Broad nur eine annäherung ist. und die Komplizierte Rechnung in der Narrow Phase stattfindet.

Ich verstehe leider nicht was du mit ObjectSpace und WorldSpace meinst.... :whistling: Werde mal Googlen und mir mal die Links angucken und alles aufsaugen :thinking:
Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.

Linus Torvalds

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Urprimat« (27.05.2015, 23:48)


16

27.05.2015, 23:50

Hmm ich dachte das zu erst die Broad Phase kommt und dann die Narrow Phase. also das die Broad nur eine annäherung ist. und die Komplizierte Rechnung in der Narrow Phase stattfindet.

Ich verstehe leider nicht was du mit ObjectSpace und WorldSpace meinst.... :whistling: Werde mal Googlen und mir mal die Links angucken und alles aufsaugen :thinking:
Vielleicht bring ich die Phasen durcheinandner. Guck dir mal die verschiedenen Spaces an. Schaden kann es nicht.

Aber du kannst auch immer eine Physik-Engine verwenden. Box2D ist im 2D Berreich sehr geeignet. Nimmt dir alles ab.

17

10.06.2015, 11:34

Hallöle,
Ich hatte leider in letzter Zeit viel zu tun und bin nicht zum proggen gekommen. Ich habe es, glaube ich, Gründsätzlich verstanden.
In meinen Worten:
ich arbeite zunächst mit eienr einfachen Boundingbox. Falls die mir eine Kollision wiedergibt Transformiere ich das Objekt vom Objectspace zum Worldspace. Somit ist mein Rechteck wieder achsenorentiert und der Ball ist natürlich mit rotiert worden. Als nächstes kann ich dann die gewohnte Kollisionerkennung benutzen.
Ich schätze so ist das richtig oder? Ich habe jedoch ein wening Startschwierigkeiten. Da ich noch nicht mit einer Matrix gearbeitet habe, weiß ich nicht ganz wie ich an die Sache herran gehen soll.

[Anonymer Benutzer] hatte es ja schon versucht.... aber nunja das verstehe ich nicht ganz :dash:

Mfg Urprimat.
Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.

Linus Torvalds

Werbeanzeige