cocos2d-x 播放序列动画的两种方法

转载请注明出处:http://blog.csdn.net/cwn0812


cocos2d-x播放序列动画分为两种方法,

1为直接读序列图片,然后runAction,;

2为读取plist文件读取图片,在runAction

我感觉两种其实都是一种方式,先读图片资源,把图片资源放到frame中,并把frame添加到CCArray中,在创建action ,然后runAction

1:

//创建一个数组,存储CCSpriteFrame
		CCArray* frames = CCArray::create();
		//for循环读取图片资源
		for (int i=1;i<=7;i++)
		{
			//定义char型str
			char str[100] = {0};
			//存储字符串,并赋值str,
			//在resource目录下图片的名称:test1,test2.....test7;
			sprintf(str,"test%d.png",i);//sprintf这个函数很重要
			//用str来创建CCSpriteFrme,并定义CCRect中对应图片的位置和宽度高度
			CCSpriteFrame* sprite = CCSpriteFrame::create(str,CCRectMake(0,0,100,100));
			//添加CCSpriteFrme
			frames->addObject(sprite);
		}
		//创建第一帧
		CCSprite* sprite = CCSprite::create("test1.png");
		//设置位置,要与上面的CCRect对牢。
		sprite->setPosition(ccp(size.height/2,size.width/2-100));
		this->addChild(sprite);
		//用数组frames创建CCAnimation
		CCAnimation* action = CCAnimation::createWithSpriteFrames(frames,0.5f);
		//运行动画
		sprite->runAction(CCAnimate::create(action));
		//运行循环动画
		//sprite->runAction(CCRepeatForever::create(CCAnimate::create(action)));
2:

//你用TexturePacker生成的plist有两个文件,一个是以.plist为结尾的,一个是以.png结尾的。
		//定义存储plist的str1
		char str1[100] = {0};
		//定义存储png的str2
		char str2[100] = {0};
		//创建一个cache
		CCSpriteFrameCache *cache = CCSpriteFrameCache::sharedSpriteFrameCache();
		//读取plist文件存为str1,例子为test.plist
		sprintf(str1, "%s.plist", "test");
		//读取plist文件存为str2,例子为test.png
		sprintf(str2, "%s.%s", "test","png");
		//cache添加解析str1,str2
		cache->addSpriteFramesWithFile(str1,str2);
		//创建数组animFrames
		CCArray* animFrames = CCArray::create();
		//设置开始帧数
		int beginIndex =1;
		//设置结束帧数
		int endIndex = 7;

		int i = beginIndex;
		//开始循环
		do {
			//判断是否结束
			if (endIndex>1&&(i-1)==endIndex)
			{
				break;
			}
			//读取plist中的key值
			sprintf(str2, "%s%d.png", "test",i);
			//创建frame
			CCSpriteFrame *frame = cache->spriteFrameByName(str2);

			if (frame) {
				//不为空,添加到数组里
				animFrames->addObject(frame);

			}else {

				break;

			}

		} while (++i);
		//下面也上面的说明一样
		CCAnimation *animation = CCAnimation::createWithSpriteFrames(animFrames, 1.0f);
		//cache中删除spriteFrames
		cache->removeSpriteFramesFromFile(str1);
		//动画结束后是否返回初始帧
		//animation->setRestoreOriginalFrame(true);
		//一些函数可以到源码看意思

		//创建精灵
		sprintf(str2, "%s%d.png", "test",beginIndex);
		CCSprite* sprite = (CCSprite*)cache->spriteFrameByName(str2);
		sprite->setPosition(ccp(size.width/2,size.height/2-100));
		this->addChild(sprite);
		//runAction
		sprite->runAction(CCAnimate::create(animation));
差不多就是以上形式,希望有所帮助

你可能感兴趣的:(cocos2d-x 播放序列动画的两种方法)