2016-07-02 6 views
0

Я использую cocos2dx v3.11.1 с C++ для создания простой игры для платформы iOS. Но я столкнулся с странной проблемой с движением спрайтов.cocos2d - Sprite не отображается должным образом

Определение основных объектов выглядит следующим образом:

Sprite *logoBackSprite; 
SpriteFrameCache *cache; 
SpriteBatchNode *batchNode; 

создать спрайт из списка свойств, как, что:

cache = SpriteFrameCache::getInstance(); 
cache->addSpriteFramesWithFile("game_sprites1.plist"); 

batchNode = SpriteBatchNode::create("game_sprites1.png"); 
addChild(batchNode); 

logoBackSprite = Sprite::createWithSpriteFrameName(fileName); 
logoBackSprite->setPosition(Vec2(centerPoint.x-4, centerPoint.y + 200-43)); 
addChild(logoBackSprite, 0); 

После этой функции я вызова, который должен выполнить простую скользящую анимацию для спрайта. Код этой функции выглядит так:

void MainMenuScene::playMenuAnimations() { 

    float startDelay = 0.0f; 

    auto windowSize = Director::getInstance()->getVisibleSize(); 
    Point centerPoint = Vec2(windowSize.width/2, windowSize.height/2);  

    logoBackSprite->stopAllActions(); 
    logoBackSprite->setOpacity(0); 
    logoBackSprite->runAction(Sequence::create(DelayTime::create(startDelay + 0.5 + 0.75), 
              FadeTo::create(0.5f, 255), 
              nullptr)); 
} 

Но когда я запускаю приложение - ничего не происходит. Не могли бы вы указать мне, что я делаю неправильно? Спасибо.

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

EDIT2 Сегодня я заметил, что любое действие работает префектом на предыдущей сцене.

ответ

0

Проблема решена. Проблема была в плохой конфигурации сцены, где я хочу запускать анимацию. Я должен переопределить методы onEnter() и onExit(). В OnEnter() метод сцены я называю

Layer::onEnter(); 

Кроме того, в классе сцены я создаю Init() метод как то:

bool MainMenuScene::init() { 
    if (!Layer::init()) 
    { 
     return false; 
    } 

    return true; 
} 

И анимация отлично работает!

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