анимация листа спрайтов cocos2dx v3

#c #cocos2d-x-3.0

#c #cocos2d-x-3.0

Вопрос:

ПРИВЕТ, я использую cocos2dx v3. я пытаюсь создать анимацию листа спрайтов. но я получаю эту ошибку: void cocos2d::Vector<T>::pushBack(T) [with T = cocos2d::SpriteFrame*]: Assertion object != nullptr failed

что, очевидно, означает, что мой вектор не инициализируется, я думаю. но почему это происходит, у меня есть правильные имена файлов в папке ресурсов

 auto cache = SpriteFrameCache::getInstance();
Vector<SpriteFrame*> frames = Vector<SpriteFrame*>();

frames.pushBack(cache->getSpriteFrameByName("1.png"));
frames.pushBack(cache->getSpriteFrameByName("2.png"));
frames.pushBack(cache->getSpriteFrameByName("3.png"));
frames.pushBack(cache->getSpriteFrameByName("4.png"));
frames.pushBack(cache->getSpriteFrameByName("5.png"));
frames.pushBack(cache->getSpriteFrameByName("6.png"));
Animation* anim = cocos2d::Animation::createWithSpriteFrames(frames, 0.1f, 1);

Animate* anim_action = cocos2d::Animate::create(anim);
auto sprite = Sprite::createWithSpriteFrame(frames.front());
sprite->runAction(RepeatForever::create(anim_action));
sprite->setPosition(Vec2(visibleSize.width/2   origin.x, visibleSize.height/2   origin.y));
this->addChild(sprite, 0);
 

Комментарии:

1. Вы уверены, что это Vector то, что не инициализируется? AFAIK cocos2d Vector требует, чтобы элементы, которые добавляются к нему, имели действительную ссылку, и в этом случае это будет означать, что один из элементов, которые SpriteFrame* вы пытаетесь добавить, недействителен (и a nullptr )

2. @UnholySheep я не уверен, что это вектор, который вызывает ошибку. я просто подумал, посмотрев на сообщение об ошибке, о котором я упоминал выше. и да, у меня есть файлы с этими именами в папке ресурсов. я не могу понять ошибку. если вы можете помочь

3. Я не могу помочь, просто взглянув на код, вам нужно использовать отладчик и выяснить, какая именно строка вызывает запуск утверждения (и, используя эти знания, вы сможете найти решение)

4. @UnholySheep — это первый толчок к вектору, который вызывает ошибки. но почему там файлы с одинаковыми именами

5. Итак, каково возвращаемое значение вызова cache->getSpriteFrameByName("1.png") ? является ли это допустимым объектом? Если да, как Vector выглядит состояние в этот момент. Поскольку Cocos2d имеет открытый исходный код, вы также должны иметь возможность входить в pushBack себя и анализировать каждый шаг вплоть до утверждения.