2016-06-20 33 views
1

Ich habe ein Nein von Sprites erstellt und sie zu der Szene mit dem gleichen Namen hinzugefügt.Ich habe ein Nein von Sprites erstellt und sie mit der gleichen Referenz zur Szene hinzugefügt und nun, wie kann ich sie ohne Verwendung von Tags entfernen?

Jetzt möchte ich alle diese entfernen, auch die ohne irgendeine Referenz. Wie kann ich das erreichen?

Ohne Verwendung removeChildBytag(); oder ohne Verwendung von Tags.

void Science::onBallMovement(cocos2d::Ref* pSender){ 

auto sp = (Sprite*)pSender; 

v1 = sp->getPosition(); 


if (v1 == v2) { 
    return; 
} 

if(v1!=v2) { 

    if (sp->getTag()==1) { 
     s = Sprite::create("Dot.png"); 
    } 
    if (sp->getTag()==2) { 
     s = Sprite::create("BlueDot.png"); 
    } 

    s->setPosition(v1); 
    s->autorelease(); 
    this->addChild(s); 
} 
v2 = v1; 
} 

void Science::update(float delta){ 

if (setting) { 
    this->onBallMovement(spr); 
    this->onBallMovement(spr1); 
} 
} 

Durch die Update-Methode des Knotens Klasse überschreiben, nenne ich die oben wiederholt und auf der aktuellen Position meines Sprite basiert, die zufällig bewegt, ich bin ein Tracker Weg zu schaffen. Aber jetzt möchte ich es basierend auf der Benutzerauswahl entfernen, wie kann ich es tun?

+0

unsicher über C++, aber hier ist, wie ich das in obj-c tun würde. Ich würde nur den Container-Knoten entfernen, wenn Logik es erfordert, und in seiner "onExit" -Methode würde ich alle seine untergeordneten Elemente iterieren und sie vom übergeordneten entfernen, mit Bereinigung. – YvesLeBorg

+0

zum Beispiel in Ziel-c. für (int i = 0; i <10; i ++) { – Mahesh

+0

zum Beispiel in Ziel-c. für (int i = 0; i <10; i ++) { Box * box1 = [[Box allokieren] init]; } [box1 release]; wenn ich so etwas in obj-c Code schreibe. Dann, wie kann ich sicherstellen, dass alle Objekte entfernt werden. Gewöhnlich entfernt es nur das letzte, wobei die anderen nicht referenziert werden. – Mahesh

Antwort

1

Es gibt mehrere Möglichkeiten, dies zu erreichen, so werde ich das die einfachste Art und Weise erklären:

einen globalen Knoten initialisieren und entfernen Sie alle Kinder

Deklarieren Sie einen Knoten in der .h Datei Ihrer Klasse.

Node* _spriteParent; 

nun den Knoten in der init-Methode Ihrer Klasse definieren. Jetzt

_spriteParent = Node::create(); 
_spriteParent->setPosition(Vec2::ZERO); 
this->addchild(_spriteParent); 

, wann immer Sie das Sprite erstellen, fügen Sie einfach, dass Sprite auf die über Knoten, die Sie gerade erstellt haben (nicht nennen Autorelease auf dem Sprite).

_spriteParent->addChild(s); 

Wenn Sie alle Sprites entfernen möchten, die Sie dem _spriteParent hinzugefügt haben, rufen Sie diese Methode:

_spriteParent->removeAllChildren(); 

und Sie sind fertig. Ich hoffe es hilft.

+0

Einige was in Ordnung. Es versucht nur, es in einem anderen Stil zu tun, wie all diese Objekte zu einem Array hinzuzufügen und dann zu entfernen. Aber, was ich will, ist, wie man alle jene nicht referenzierten Gegenstände entfernt. – Mahesh