2016-06-20 7 views
1

Я создал no sprites и добавил их к сцене с тем же именем.Я создал no sprites и добавил их на сцену с той же ссылкой, и теперь, как я могу удалить их с помощью тегов?

Теперь я хочу удалить все те, даже те, у кого нет ссылки. Как я могу это достичь.

Без использования removeChildBytag(); или без использования тегов.

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); 
} 
} 

Переопределелив метод обновления класса узлов, я звоню выше неоднократно и на основе текущей позиции моего спрайта, который перемещается случайным образом, я создаю трекер пути. Но теперь, я хочу удалить его на основе выбора пользователя, как я могу это сделать?

+0

неопределенный о C++, но вот как я сделал бы это в obj-c. Я бы просто удалил контейнерный узел, когда это требует логика, и в нем метод 'onExit', я бы перебирал все его дочерние элементы и удалял их из родителя с очисткой. – YvesLeBorg

+0

например, в объективе-c. для (int i = 0; i <10; i ++) { – Mahesh

+0

например, в объективе-c. для (int i = 0; i <10; i ++) { Box * box1 = [[Box alloc] init]; } [коробка1 релиз]; если я напишу код примерно так в obj-c. Затем, как я могу убедиться, что все объекты удалены. Обычно он удаляет только последний, где остальные не отображаются. – Mahesh

ответ

1

Есть несколько способов для достижения этой цели, так что я отхожу в объяснить самый простой способ:

Инициализации глобального узла и удалить все ребенок

Объявите узел в .h файл вашего класса.

Node* _spriteParent; 

Теперь определим узел в методе инициализации вашего класса.

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

Теперь, когда вы создаете спрайт, только добавить, что спрайт в выше узла, который вы только что создали (не называйте autorelease на спрайта).

_spriteParent->addChild(s); 

Если вы хотите, чтобы удалить все спрайты, которые были добавлены к _spriteParent, вызовите этот метод:

_spriteParent->removeAllChildren(); 

, и вы сделали. Надеюсь, поможет.

+0

Некоторые, что хорошо. Он просто пытается сделать это в другом стиле, например, добавив все эти объекты в массив, а затем удалив его. Но, что я хочу, как удалить все эти объекты без ссылок. – Mahesh

 Смежные вопросы

  • Нет связанных вопросов^_^