cocos2dx 自定义动画
bool HelloWorld::init() { ////////////////////////////// // 1. super init first if ( !CCLayer::init() ) { return false; } //// 添加4个精灵, 每个精灵用来标示一帧 // CCSprite * sp1= CCSprite::create("crop1.png"); // CCSprite * sp2= CCSprite::create("crop2.png"); // CCSprite * sp3= CCSprite::create("crop3.png"); // CCSprite * sp4= CCSprite::create("crop4.png"); CCSprite * sp1= CCSprite::create("crop.png", CCRectMake(0, 0, 100, 86)); CCSprite * sp2= CCSprite::create("crop.png", CCRectMake(100, 0, 100, 86)); CCSprite * sp3= CCSprite::create("crop.png", CCRectMake(200, 0, 100, 86)); CCSprite * sp4= CCSprite::create("crop.png", CCRectMake(300, 0, 100, 86)); // 设置一样的坐标 sp1->setPosition(ccp(100, 180)); sp2->setPosition(ccp(100, 180)); sp3->setPosition(ccp(100, 180)); sp4->setPosition(ccp(100, 180)); // 设置2-4帧不可见, 初始化时只显示第一帧 sp2->setVisible(false); sp3->setVisible(false); sp4->setVisible(false); // 添加到当前层中 tag 按照顺序0~3 addChild(sp1,0,0); addChild(sp2,0,1); addChild(sp3,0,2); addChild(sp4,0,3); // 每0.5s调用一次myUpdate(每0.5s切换一帧) schedule(schedule_selector(HelloWorld::myUpdate),0.5); return true; } void HelloWorld:: myUpdate(float dt) { currentFrameIndex++; CCLOG("currentFrameIndex= %i",currentFrameIndex); // 获取当前所有精灵 CCArray*array= this->getChildren(); // 防止下标超过最大tag的精灵 if (currentFrameIndex>=array->count()) { currentFrameIndex=0; } // 隐藏所有的精灵 for (int i = 0 ; i <array->count(); i++) { CCSprite*spt =(CCSprite*)this->getChildByTag(i); spt->setVisible(false); } // 让下一帧显示出来 CCSprite *sp = (CCSprite*)array->objectAtIndex(currentFrameIndex); sp->setVisible(true); }
.CPP
.h
class HelloWorld : public cocos2d::CCLayer { public: // Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer) virtual bool init(); // there's no 'id' in cpp, so we recommend to return the class instance pointer static cocos2d::CCScene* scene(); // a selector callback void menuCloseCallback(CCObject* pSender); // preprocessor macro for "static create()" constructor ( node() deprecated ) CREATE_FUNC(HelloWorld); // 定义一个变量用以标识当前显示的帧下标 int currentFrameIndex; // 自定义的更新函数 void myUpdate(float dt); };