【问题标题】:SpriteAnimation in COCOS2DX with plistCOCOS2DX 中的 SpriteAnimation 和 plist
【发布时间】:2012-09-08 12:05:42
【问题描述】:

你好,我正在使用这段代码为使用 cocos2dx 的精灵制作动画。

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("suhas.plist");
    CCLog("#########################");
    CCSpriteBatchNode *spriteSheet = CCSpriteBatchNode::batchNodeWithFile("suhas.PNG");
    CCLog("*********************************");
    this->addChild(spriteSheet);
    CCLog("*********************************");
    CCArray *bearArray = new CCArray();
     for(int i = 1; i <= 8; i++)
     {
         CCLog("*********************************");
        char name[32] = {0}; 
         sprintf(name, "bear%d.png",i);
        bearArray->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(name));
}
    CCAnimation *walkAnim = CCAnimation::animationWithSpriteFrames(bearArray, 0.1f);
    CCSize size = CCDirector::sharedDirector()->getWinSize();
    CCSprite *bear = CCSprite::spriteWithSpriteFrameName("bear1.png");
    bear->setPosition(ccp(size.width/2, size.height/2));
    CCAction *walkAction = CCRepeatForever::actionWithAction(CCAnimate::actionWithAnimation(walkAnim));
    bear->runAction(walkAction);
    spriteSheet->addChild(bear);
    return true;

但是我的代码崩溃了。并给出错误

cocos2d: CCSpriteFrameCache: Trying to use file D:\cocos2dnew\SPRITEAnimDemo\Resources\suhas.png as texture
First-chance exception at 0x00000000 in SPRITEAnimDemo.win32.exe: 0xC0000005: Access violation.
Unhandled exception at 0x00000000 in SPRITEAnimDemo.win32.exe: 0xC0000005: Access violation.
The program '[1012] SPRITEAnimDemo.win32.exe: Native' has exited with code -1073741819 (0xc0000005).

我尝试在谷歌上解决这个问题。请帮帮我。

【问题讨论】:

标签: cocos2d-x visual-c++-2010


【解决方案1】:

改变这一行

*spriteSheet = CCSpriteBatchNode::batchNodeWithFile("suhas.PNG");

*spriteSheet = CCSpriteBatchNode::batchNodeWithFile("suhas.png");

【讨论】:

    【解决方案2】:

    在新版本的 cocos2d-x 中可以先添加 batchnode :

     SpriteFrameCache::getInstance()->addSpriteFramesWithFile("sprite_sheet.plist");
    _gameBatchNode = SpriteBatchNode::create("sprite_sheet.png");
    this->addChild(_gameBatchNode, 1);
    

    动画:

     auto animation = Animation::create();
    int i;
    for(i = 1; i <= 10; i++) {
        auto name = String::createWithFormat("boom%i.png", i);
        //auto name = String::createWithFormat("meteor-%i.png", i);
        auto frame = SpriteFrameCache::getInstance()->getSpriteFrameByName(name->getCString());
        animation->addSpriteFrame(frame);
    }
    
    animation->setDelayPerUnit(1 / 10.0f);
    animation->setRestoreOriginalFrame(true);
    

    注意,boom.png 和 meteor.png 在 sprite_sheet.plist 中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-25
      • 2013-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多