Eine Möglichkeit, dies zu erreichen, ist durch Ihre kollidierende Sprites in einem Vektor zu speichern:
std::vector<std::pair<coco2d::Sprite*, cocos2d::Sprite*>> collisionVector;
Sie können die zwei kollidierende Sprite-Objekte aus dem Kontakt auf diese Weise erhalten:
auto spriteA = dynamic_cast<Sprite*>(contact.getShapeA()->getBody()->getNode());
auto spriteB = dynamic_cast<Sprite*>(contact.getShapeB()->getBody()->getNode());
speichert sie in Kollision Vektor, wenn kein Sprite null ist. Tun Sie dies jedes Mal, wenn Sie einen Physikkontakt bekommen. Jetzt können Sie dies in Ihrer update() - Funktion verwenden, um nach einer Kollision zu suchen. Wenn eine Kollision vorliegt, können Sie ein benutzerdefiniertes Ereignis auslösen. Sie können auch die Aktualisierungsfunktion verwenden, um die Liste zu bereinigen, wenn die Kollision vorüber ist oder Sie ein Sprite gelöscht haben.
Um auf Kollision zu prüfen, müssen Sie die Bounding Box jedes Sprites abrufen und vergleichen. Sie können Begrenzungsrahmen erhalten wie folgt:
cocos2d::Rect boundingBox = sprite->getBoundingBox();
Jetzt können Sie beiden boundingBoxes gegeneinander überprüfen verwenden, um zu sehen, ob die Prüfung vier Ecken des Kastens in der anderen Box sind. Sie können hierzu die Funktion containsPoint() von Rect verwenden.
Schließlich, wenn Sie die boundingBoxs sind innerhalb einer der anderen gefunden, feuern ein eigenes Kollisionsereignis:
void onCollisionInside(Sprite* spriteA, Sprite* spriteB)
{
//do something
}