2016-11-05 3 views
1

Ich benutze Cocos2d-x und ich bin nur auf der Suche nach effizienten Weg, um Sprites unter einem rechteckigen Bereich zu entfernen.Cocos2d-x Entfernen von Sprites in einem bestimmten rechteckigen Bereich

Zum Beispiel, wenn ich viele zufällig angeordnete Sprites in der Szene habe und ich alle entfernen möchte, wenn sie zu rechteckig gehören (x1, y1), (x2, y2), was muss ich tun?

Ich sehe, dass es zwei Möglichkeiten gibt Sprite aus der Szene zu entfernen:

this->removeChildByTag(tag); 

oder

sprite->removeFromParent(); 

So von diesen Methoden scheint es, dass wir irgendwie finden müssen, welche Sprites im Inneren befinden den Bereich und danach löschen Sie sie.

Aber was ist der effizienteste Weg?

Danke!

Antwort

1

Die einzige Möglichkeit, dies mit der Standard-Cocos-Funktionalität zu tun, wäre, über jedes Kind zu iterieren, um Überlappungen zu erkennen und Knoten zu entfernen, die den Kriterien entsprechen. removeFromParent() sowie removeChildByTag() rufen parent->removeChild(this); auf. Und verwendet std::find in Vector von untergeordneten Knoten. Mit Komplexität O (n). Daher wäre der erste Schritt der Optimierung die Verwendung von detachChild, die den Index des Kindes verwendet.

Aber wenn das nicht schnell genug ist, würde ich empfehlen, spezielle Datenstruktur zu verwenden, um schnell nach überlappenden wie Intervallbaum zu suchen.

Verwandte Themen