Ich habe eine cocos2d-Szene mit mehreren untergeordneten Objekten, aus denen die Bildschirmanzeige besteht. Einige dieser untergeordneten Objekte müssen miteinander kommunizieren, damit die Anzeige aktualisiert werden kann.Cocos2d - Verwenden von getChildByTag aus untergeordneten Klassen zum Abrufen von Objekten in einer Szene
Ich entschied mich dafür, Referenzen auf Objekte im Szenegraphen nicht zu übergeben, sondern alle cocos2d-Knoten zu markieren, die Tag-Werte zu übergeben und dann jedes Mal, wenn ich ein Szenenobjekt brauche, den Director zu verwenden das Etikett
Dies bedeutet, dass ich nicht viele Verweise auf herumfliegende Objekte habe und mein Denken war, dass es sauberer wäre und weniger Speicherprobleme verursachen würde, wenn Objekte nicht beibehalten würden.
Ich verwende den folgenden Code einen bestimmten Knoten abzurufen:
CCNode* node = [[[[CCDirector sharedDirector] runningScene] getChildByTag:TAG_MY_LAYER] getChildByTag:TAG_MY_OBJECT];
if (node != nil){
NSAssert([node isKindOfClass:[myObject class]], @"node is not a myObject");
myObject* mo = (myObject*)node;
...
other stuff
....
Problem: Wenn eine Szene mit einem Übergangs Initialisierung wird dann dieses Verfahren funktioniert nicht. Der Aufruf der laufenden Szene gibt den Übergang und nicht die neue Szene zurück. Wenn Sie auf das - onEnterTransitionDidFinish warten, funktioniert es immer noch nicht. Es scheint so, als müssten Sie danach etwas warten (vermutlich, damit die alte Szene zerstört wird), bevor der Übergang entfernt wird und runningScene Ihre neue Szene ist.
Ist es möglich, einen Verweis auf einen Teil des Szenengraphen zu bekommen, von dem ich getChildByTag aufrufen kann, und es wird mein getaggtes Objekt bekommen, unabhängig vom Status der Szenen, die übergehen?