SpriteAnimation in COCOS2DX with plist

Hi, I am using this code to animate a sprite using 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; 

But my code is failing. and issue an error

 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). 

I tried Google to solve this problem. Please help me.

+4
source share
2 answers

Change this line

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

with

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

In the newer version of cocos2d-x, you can add batchnode first:

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

for animation:

  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); 

Note that boom.png and meteor.png are inside sprite_sheet.plist

0
source

Source: https://habr.com/ru/post/1433130/


All Articles