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

1

25.03.2016, 16:08

GELÖST: [Phaser] p2 Physics Kollisionserkennung ohne tatsächliche Kollision(Abstoßen)?

Erstmal hallo zusammen,

im Zuge der Game++ Community Challenge 8 habe ich vor etwa 1 Woche mit Phaser angefangen.
Da ich für mein Spiel genaue Kollisionserfassung brauche bin ich auf die p2 Physik angewiesen.
Ich will allerdings wirklich nur die Kollisionserkennung von p2 nutzen, und nicht die default Kollisionen, wo sich alle Objekte/Sprites abstoßen.
Eigentlich sind dafür die static und kinematic body types da. Sobald aber mehr als eines der kollidierenden Objekte static oder kinematic ist, wird gar kein Event mehr erkannt.
Ich hatte dafür onBeginContact benutzt und eine Funktion damit aufgerufen die alles "regelt".
Habt ihr irgendeine Ahnung wie man das vernünftig lösen kann? ;(

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »PansenDarmVirus« (29.03.2016, 22:08) aus folgendem Grund: Problem gelöst


2

29.03.2016, 22:07

Nachdem ich mich nun einige Tage mit dem Problem rumgequält habe :dash: :zombie:
habe ich den Grund gefunden, wieso shape.sensor=true (die alternative zu static, aber mit Erkennen von onBeginContact etc.) nicht funktioniert hat. Anscheinend wird ein geladenes Polygon als mehrere Shapes gespeichert, die alle sensor=true haben wollen. In diesem Sinne habe ich einfach eine for-Schleife genommen und Heureka:

Quellcode

1
2
3
4
5
6
7
8
9
gemuese = this.add.sprite(42,42,"gurke");
this.game.physics.p2.enable(gemuese, true);
gemuese.body.clearShapes();
gemuese.body.loadPolygon("collision_masks", "gurke");
for(var i=0; i<gemuese.body.data.shapes.length;i++)gemuese.body.data.shapes[i].sensor=true;
gemuese.body.onBeginContact.add(fischfutter, this);
fischfutter = function(body, bodyB, shapeA, shapeB, equation) {
   console.log("Heureka!");
   }


Vielleicht könnt ihr den Code zur #gppcc8 bei meinem Spiel AllYouCanEat ja schon bald in Action sehen :D