#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 cocos2dVector
требует, чтобы элементы, которые добавляются к нему, имели действительную ссылку, и в этом случае это будет означать, что один из элементов, которыеSpriteFrame*
вы пытаетесь добавить, недействителен (и anullptr
)2. @UnholySheep я не уверен, что это вектор, который вызывает ошибку. я просто подумал, посмотрев на сообщение об ошибке, о котором я упоминал выше. и да, у меня есть файлы с этими именами в папке ресурсов. я не могу понять ошибку. если вы можете помочь
3. Я не могу помочь, просто взглянув на код, вам нужно использовать отладчик и выяснить, какая именно строка вызывает запуск утверждения (и, используя эти знания, вы сможете найти решение)
4. @UnholySheep — это первый толчок к вектору, который вызывает ошибки. но почему там файлы с одинаковыми именами
5. Итак, каково возвращаемое значение вызова
cache->getSpriteFrameByName("1.png")
? является ли это допустимым объектом? Если да, какVector
выглядит состояние в этот момент. Поскольку Cocos2d имеет открытый исходный код, вы также должны иметь возможность входить вpushBack
себя и анализировать каждый шаг вплоть до утверждения.