Почему этот CCSpriteFrame имеет значение null?

Приведенный ниже код компилируется и хорошо работает в разделе init () класса, но когда я пытаюсь создать для него отдельный метод, CCSpriteFrame обнуляется, я хотел бы узнать, какое концептуальное предположение я получил в этот раз = s

void SceneView::runZoo(Animal& animal, std::string attack) {
//
// Animation using Sprite BatchNode
//
std::string spriteName;
CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();
CCSize iSize = CCDirector::sharedDirector()->getWinSize();

spriteName = "killerRabbit.plist";
cache->addSpriteFramesWithFile(spriteName.c_str());

spriteName = "killerRabbit1.png";
sprite = CCSprite::createWithSpriteFrameName(spriteName.c_str());
sprite->setPosition( ccp(iSize.width/2 - 160, iSize.height/2 - 40) );

spriteName = "killerRabbit.png";
CCSpriteBatchNode* spritebatch = CCSpriteBatchNode::create(spriteName.c_str());
spritebatch->addChild(sprite);
this->addChild(spritebatch);

CCArray* animFrames = CCArray::createWithCapacity(15);

spriteName = "killerRabbit";
char str[100] = {0};
for(int i = 1; i <= 9; i++) {
sprintf(str, (spriteName + "%d.png").c_str(), i);
CCSpriteFrame* frame = cache->spriteFrameByName(str);
//Null here
animFrames->addObject(frame);
//Null here
}

CCAnimation* animation = CCAnimation::createWithSpriteFrames(animFrames, 0.15f);
sprite->runAction( CCRepeatForever::create(CCAnimate::create(animation)) );
}

Фактическая ошибка:

/** Appends an object. Behavior undefined if array doesn't have enough capacity. */
void ccArrayAppendObject(ccArray *arr, CCObject* object)
{
CCAssert(object != NULL, "Invalid parameter!");
object->retain();
arr->arr[arr->num] = object;
arr->num++;
}

Это означает, что CCSpriteFrameCache может быть обнулен по какой-то причине, есть идеи?

0

Решение

Я не много работал с cocos2d в среде C ++, но я знаю, что в Objective-c, прежде чем вы сможете использовать массив, вы должны сделать это

CCArray *array = [[CCArray alloc] initWithCapacity:15];

Если вы этого не сделаете, он всегда будет нулевым. Я бы предположил, что то же самое с C ++

0

Другие решения

frame == null когда указанное изображение не существует. Я думаю, вам лучше просмотреть plist файл или найдите, какой кадр вызвал ошибку.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector