●그림 파일을 입출력 할때 시스템 비용이 많이 든다. 그래서 여러개의 그림파일을 하나의 파일(plist)로 만들어서 불러들이고 plist에서 필요한 그림파일을 불러들이는게 좋다. 개별 스프라이트를 불러들이는 것보다 plist를 통해 불러들이면 리소스 관리가 쉽고 편하다.
●스프라이트 배치 노드를 이용한 애니메이션
- HelloWorld.cpp
#include "HelloWorldScene.h" using namespace cocos2d; CCScene* HelloWorld::scene() { CCScene *scene = CCScene::create();
HelloWorld *layer = HelloWorld::create(); scene->addChild(layer); return scene; } bool HelloWorld::init() { if ( !CCLayerColor::initWithColor(ccc4(255, 255, 255, 255)) ) { return false; } ///////////////////////////// CCSize s = CCDirector::sharedDirector()->getWinSize();
// 스프라이트 시트의 위치정보 파일을 읽어들인다. CCSpriteFrameCache *cache = CCSpriteFrameCache::sharedSpriteFrameCache(); cache->addSpriteFramesWithFile("animations/grossini.plist");
CCArray* animFrames = CCArray::createWithCapacity(15);
char str[100] = {0}; for(int i = 1; i < 15; i++) { sprintf(str, "grossini_dance_%02d.png", i); CCSpriteFrame* frame = cache->spriteFrameByName( str ); animFrames->addObject(frame); }
//첫번째 프레임으로 스프라이트를 만든다. CCSprite *pMan = CCSprite::createWithSpriteFrameName("grossini_dance_01.png"); pMan->setPosition( ccp( 50, s.height/2) ); this->addChild(pMan);
// 애니메이션 만들기 CCAnimation* animation = CCAnimation::createWithSpriteFrames(animFrames, 0.5f); CCAnimate *animate = CCAnimate::create(animation); CCActionInterval* myActionForward = CCMoveBy::create(2, ccp(400, 0)); CCActionInterval* myActionBack = myActionForward->reverse(); CCFiniteTimeAction* myAction = CCSequence::create(myActionForward, myActionBack, NULL);
CCAction* action = CCSpawn::create(animate, myAction, NULL); CCActionInterval* rep1 = (CCActionInterval*)action; CCAction* rep2 = CCRepeatForever::create(rep1); pMan->runAction(rep2);
return true; } |
'프로그래밍 > cocos2d-x' 카테고리의 다른 글
cocos2d-x 터치(Touch) (0) | 2013.06.01 |
---|---|
cocos2d-x 심플오디오엔진(SimpleAudioEngine) (0) | 2013.05.31 |
cocos2d-x 트랜지션(Transition) 추가,삭제,교체 (0) | 2013.05.30 |
cocos2d-x 액션3 (0) | 2013.05.29 |
cocos2d-x 액션2 (0) | 2013.05.28 |
댓글