Удаление Sprite со сцены cocos2d-x

223
23 июля 2021, 07:10

При удалении спрайта функциями this->removeChild(sprite,true); или this->removeChildByTag(1) или sprite->removeFromParent(); вылетает игра. В чём заключается проблема? Вроде простенькая функция, а крашит всё приложение.

Вылетает с ошибкой

A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x58 in tid 7163 (GLThread 1727), pid 7124 (nyName.GameName)

Листинг:

bool HelloWorld::init() {
if (!Scene::init()) {
    return false;
}
auto visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();

/////////////////////////////
//спрайт игрока
ship = Sprite::create("player.png");
ship->setScale(5);
ship->setPosition(30, 100);
//жизни
for(int i=0;i<lifes;i++){
    heart=Sprite::create("heart.png");
    heart->setPosition(Vec2(origin.x + 30 + i * 20,visibleSize.height-10));
    heart->setScale(7);
    this->addChild(heart,2);
    hearts.push_back(heart);
}

//задний фон
background=Sprite::create("background.png");
background->setAnchorPoint(Point(0.5,0.5));
background->setScale(10);
background->setPosition(Director::getInstance()->getVisibleSize().width/2,Director::getInstance()->getVisibleSize().height/2);
//кнопка вверх
ui::Button *upButton=ui::Button::create("button_up.png","button_up.png");
upButton->setPosition(Vec2(30,80));
upButton->addTouchEventListener(CC_CALLBACK_2(HelloWorld::touchEventUp,this));
//кнопка вниз
ui::Button *downButton=ui::Button::create("button_down.png","button_down.png");
downButton->setPosition(Vec2(30,40));
downButton->addTouchEventListener(CC_CALLBACK_2(HelloWorld::touchEventDown,this));
//кнопка выстрела
ui::Button *shootButton=ui::Button::create("button_shoot.png","button_shoot.png");
shootButton->setPosition(Vec2(visibleSize.width-50,50));
shootButton->addTouchEventListener(CC_CALLBACK_2(HelloWorld::touchEventShoot,this));
//добавляем элементы на сцену
this->addChild(upButton,2);
this->addChild(downButton,2);
this->addChild(shootButton,2);
this->addChild(background,0);
this->addChild(ship,1);
ship->setTag(1);
//this->removeChildByTag(ship);
//this->removeChildByName("player.png",true);

//this->removeChild(ship);

// ship->removeFromParent();
this->scheduleUpdate();
this->schedule(schedule_selector(HelloWorld::setGamePlaySpeed),1);
return true;

}

READ ALSO
Нужен SD_SEND для UDP соединения?

Нужен SD_SEND для UDP соединения?

Есть такой код, как я понял он полностью отключает соединения, мне интересно для чего его используют в UDP сетиИли его вообще не используют...

267
Как передать указатель в другую функцию с++?

Как передать указатель в другую функцию с++?

В С++ я полный ноль, начал изучать по нужде буквально сутки назадЕсть проблема

226
Чтение первых двух слов строки файла

Чтение первых двух слов строки файла

Столкнулся с такой проблемойМне необходимо записать слова в два массива

337
Создание const поля в объекте структуры

Создание const поля в объекте структуры

Имеется поле в структуре с расширением constКак заполнить его извне при создании обьекта (например, конструктор)

191