【Cocos2d-x游戏引擎开发笔记(5)】自定义动画
2015-03-04 13:42
495 查看
转载自:/article/1389517.html
上篇中实现的是Cocos2d-x提供给我们的动画,这次要实现的动画是自定义的动画。
这次实现的是让一个精灵一直执行我给的图片,从而达到动画的效果,还是截几张图看看。
图片资源来自解压《捕鱼达人》和《魔塔》
一共有18张图片。
[cpp] view
plaincopy
CCTexture2D *pTexture=CCTextureCache::sharedTextureCache()->addImage("hero.png");
CCSpriteFrame *frame0=CCSpriteFrame::createWithTexture(pTexture,CCRectMake(0,0,32,32));
CCSpriteFrame *frame1=CCSpriteFrame::createWithTexture(pTexture,CCRectMake(32,0,32,32));
CCSpriteFrame *frame2=CCSpriteFrame::createWithTexture(pTexture,CCRectMake(64,0,32,32));
CCSpriteFrame *frame3=CCSpriteFrame::createWithTexture(pTexture,CCRectMake(96,0,32,32));
CCArray *animFrames=CCArray::create();
CC_BREAK_IF(!animFrames);
animFrames->addObject(frame0);
animFrames->addObject(frame1);
animFrames->addObject(frame2);
animFrames->addObject(frame3);
CCAnimation *animation=CCAnimation::createWithSpriteFrames(animFrames,0.2f);
CC_BREAK_IF(!animation);
CCSprite *heroSprite0=CCSprite::createWithSpriteFrame(frame0);
CC_BREAK_IF(!heroSprite0);
heroSprite0->setPosition(ccp(100,100));
addChild(heroSprite0,1);
CCAnimate *animate=CCAnimate::create(animation);
heroSprite0->runAction(CCRepeatForever::create(animate));//一直执行下去
上面的动画是使英雄一直执行走动下去。
还有另外的一种方法来实现自定义动画:
[cpp] view
plaincopy
CCAnimation* animation2 = CCAnimation::create();
for(int i=1;i<19;i++)
{
char *tt=new char[3];
memset(tt,0,3);
std::string s;
if(i<10)
{
itoa(i,tt,10);
s="fish00"+std::string(tt);
}
else
{
itoa(i,tt,10);
s="fish0"+std::string(tt);
}
s=s+".png";
CCTexture2D *playerRunTexture = CCTextureCache::sharedTextureCache()->addImage(s.c_str());
animation2->addSpriteFrame(CCSpriteFrame::createWithTexture(playerRunTexture, cocos2d::CCRectMake(0, 0, 100, 100)));
delete []tt;
}
animation2->setDelayPerUnit(0.2f);
CCAnimate* action = CCAnimate::create(animation2);
CCTexture2D *playerRunTexture0 = CCTextureCache::sharedTextureCache()->addImage("fish001.png");
CCSprite *p=CCSprite::createWithSpriteFrame(CCSpriteFrame::createWithTexture(playerRunTexture0, cocos2d::CCRectMake(0, 0, 100, 100)));
p->setPosition(ccp(200,200));
addChild(p,1);
p->runAction(CCRepeatForever::create(action));
代码是如此的简单,我就不多说了。
最后照例贴出init函数的全部代码:
[cpp] view
plaincopy
bool HelloWorld::init()
{
mPercentage=100;
bool bRet = false;
do
{
CC_BREAK_IF(! CCLayer::init());
CCTexture2D *pTexture=CCTextureCache::sharedTextureCache()->addImage("hero.png");
CCSpriteFrame *frame0=CCSpriteFrame::createWithTexture(pTexture,CCRectMake(0,0,32,32));
CCSpriteFrame *frame1=CCSpriteFrame::createWithTexture(pTexture,CCRectMake(32,0,32,32));
CCSpriteFrame *frame2=CCSpriteFrame::createWithTexture(pTexture,CCRectMake(64,0,32,32));
CCSpriteFrame *frame3=CCSpriteFrame::createWithTexture(pTexture,CCRectMake(96,0,32,32));
CCArray *animFrames=CCArray::create();
CC_BREAK_IF(!animFrames);
animFrames->addObject(frame0);
animFrames->addObject(frame1);
animFrames->addObject(frame2);
animFrames->addObject(frame3);
CCAnimation *animation=CCAnimation::createWithSpriteFrames(animFrames,0.2f);
CC_BREAK_IF(!animation);
CCSprite *heroSprite0=CCSprite::createWithSpriteFrame(frame0);
CC_BREAK_IF(!heroSprite0);
heroSprite0->setPosition(ccp(100,100));
addChild(heroSprite0,1);
CCAnimate *animate=CCAnimate::create(animation);
heroSprite0->runAction(CCRepeatForever::create(animate));//一直执行下去
CCActionInterval *en=CCRotateBy::create(5,-360);
CCSprite *hua=CCSprite::create("end.png");
hua->setPosition(ccp(240,160));
addChild(hua,1);
hua->runAction(CCRepeatForever::create(en));
CCAnimation* animation2 = CCAnimation::create();
for(int i=1;i<19;i++)
{
char *tt=new char[3];
memset(tt,0,3);
std::string s;
if(i<10)
{
itoa(i,tt,10);
s="fish00"+std::string(tt);
}
else
{
itoa(i,tt,10);
s="fish0"+std::string(tt);
}
s=s+".png";
CCTexture2D *playerRunTexture = CCTextureCache::sharedTextureCache()->addImage(s.c_str());
animation2->addSpriteFrame(CCSpriteFrame::createWithTexture(playerRunTexture, cocos2d::CCRectMake(0, 0, 100, 100)));
delete []tt;
}
animation2->setDelayPerUnit(0.2f);
CCAnimate* action = CCAnimate::create(animation2);
CCTexture2D *playerRunTexture0 = CCTextureCache::sharedTextureCache()->addImage("fish001.png");
CCSprite *p=CCSprite::createWithSpriteFrame(CCSpriteFrame::createWithTexture(playerRunTexture0, cocos2d::CCRectMake(0, 0, 100, 100)));
p->setPosition(ccp(200,200));
addChild(p,1);
p->runAction(CCRepeatForever::create(action));
bRet = true;
} while (0);
return bRet;
}
上篇中实现的是Cocos2d-x提供给我们的动画,这次要实现的动画是自定义的动画。
这次实现的是让一个精灵一直执行我给的图片,从而达到动画的效果,还是截几张图看看。
图片资源来自解压《捕鱼达人》和《魔塔》
一共有18张图片。
[cpp] view
plaincopy
CCTexture2D *pTexture=CCTextureCache::sharedTextureCache()->addImage("hero.png");
CCSpriteFrame *frame0=CCSpriteFrame::createWithTexture(pTexture,CCRectMake(0,0,32,32));
CCSpriteFrame *frame1=CCSpriteFrame::createWithTexture(pTexture,CCRectMake(32,0,32,32));
CCSpriteFrame *frame2=CCSpriteFrame::createWithTexture(pTexture,CCRectMake(64,0,32,32));
CCSpriteFrame *frame3=CCSpriteFrame::createWithTexture(pTexture,CCRectMake(96,0,32,32));
CCArray *animFrames=CCArray::create();
CC_BREAK_IF(!animFrames);
animFrames->addObject(frame0);
animFrames->addObject(frame1);
animFrames->addObject(frame2);
animFrames->addObject(frame3);
CCAnimation *animation=CCAnimation::createWithSpriteFrames(animFrames,0.2f);
CC_BREAK_IF(!animation);
CCSprite *heroSprite0=CCSprite::createWithSpriteFrame(frame0);
CC_BREAK_IF(!heroSprite0);
heroSprite0->setPosition(ccp(100,100));
addChild(heroSprite0,1);
CCAnimate *animate=CCAnimate::create(animation);
heroSprite0->runAction(CCRepeatForever::create(animate));//一直执行下去
上面的动画是使英雄一直执行走动下去。
还有另外的一种方法来实现自定义动画:
[cpp] view
plaincopy
CCAnimation* animation2 = CCAnimation::create();
for(int i=1;i<19;i++)
{
char *tt=new char[3];
memset(tt,0,3);
std::string s;
if(i<10)
{
itoa(i,tt,10);
s="fish00"+std::string(tt);
}
else
{
itoa(i,tt,10);
s="fish0"+std::string(tt);
}
s=s+".png";
CCTexture2D *playerRunTexture = CCTextureCache::sharedTextureCache()->addImage(s.c_str());
animation2->addSpriteFrame(CCSpriteFrame::createWithTexture(playerRunTexture, cocos2d::CCRectMake(0, 0, 100, 100)));
delete []tt;
}
animation2->setDelayPerUnit(0.2f);
CCAnimate* action = CCAnimate::create(animation2);
CCTexture2D *playerRunTexture0 = CCTextureCache::sharedTextureCache()->addImage("fish001.png");
CCSprite *p=CCSprite::createWithSpriteFrame(CCSpriteFrame::createWithTexture(playerRunTexture0, cocos2d::CCRectMake(0, 0, 100, 100)));
p->setPosition(ccp(200,200));
addChild(p,1);
p->runAction(CCRepeatForever::create(action));
代码是如此的简单,我就不多说了。
最后照例贴出init函数的全部代码:
[cpp] view
plaincopy
bool HelloWorld::init()
{
mPercentage=100;
bool bRet = false;
do
{
CC_BREAK_IF(! CCLayer::init());
CCTexture2D *pTexture=CCTextureCache::sharedTextureCache()->addImage("hero.png");
CCSpriteFrame *frame0=CCSpriteFrame::createWithTexture(pTexture,CCRectMake(0,0,32,32));
CCSpriteFrame *frame1=CCSpriteFrame::createWithTexture(pTexture,CCRectMake(32,0,32,32));
CCSpriteFrame *frame2=CCSpriteFrame::createWithTexture(pTexture,CCRectMake(64,0,32,32));
CCSpriteFrame *frame3=CCSpriteFrame::createWithTexture(pTexture,CCRectMake(96,0,32,32));
CCArray *animFrames=CCArray::create();
CC_BREAK_IF(!animFrames);
animFrames->addObject(frame0);
animFrames->addObject(frame1);
animFrames->addObject(frame2);
animFrames->addObject(frame3);
CCAnimation *animation=CCAnimation::createWithSpriteFrames(animFrames,0.2f);
CC_BREAK_IF(!animation);
CCSprite *heroSprite0=CCSprite::createWithSpriteFrame(frame0);
CC_BREAK_IF(!heroSprite0);
heroSprite0->setPosition(ccp(100,100));
addChild(heroSprite0,1);
CCAnimate *animate=CCAnimate::create(animation);
heroSprite0->runAction(CCRepeatForever::create(animate));//一直执行下去
CCActionInterval *en=CCRotateBy::create(5,-360);
CCSprite *hua=CCSprite::create("end.png");
hua->setPosition(ccp(240,160));
addChild(hua,1);
hua->runAction(CCRepeatForever::create(en));
CCAnimation* animation2 = CCAnimation::create();
for(int i=1;i<19;i++)
{
char *tt=new char[3];
memset(tt,0,3);
std::string s;
if(i<10)
{
itoa(i,tt,10);
s="fish00"+std::string(tt);
}
else
{
itoa(i,tt,10);
s="fish0"+std::string(tt);
}
s=s+".png";
CCTexture2D *playerRunTexture = CCTextureCache::sharedTextureCache()->addImage(s.c_str());
animation2->addSpriteFrame(CCSpriteFrame::createWithTexture(playerRunTexture, cocos2d::CCRectMake(0, 0, 100, 100)));
delete []tt;
}
animation2->setDelayPerUnit(0.2f);
CCAnimate* action = CCAnimate::create(animation2);
CCTexture2D *playerRunTexture0 = CCTextureCache::sharedTextureCache()->addImage("fish001.png");
CCSprite *p=CCSprite::createWithSpriteFrame(CCSpriteFrame::createWithTexture(playerRunTexture0, cocos2d::CCRectMake(0, 0, 100, 100)));
p->setPosition(ccp(200,200));
addChild(p,1);
p->runAction(CCRepeatForever::create(action));
bRet = true;
} while (0);
return bRet;
}
相关文章推荐
- 【Cocos2d-x游戏引擎开发笔记(5)】自定义动画
- 【Cocos2d-x游戏引擎开发笔记(26)】中文和自定义字体
- 【Cocos2d-x游戏引擎开发笔记(10)】自定义场景和场景跳转
- 【Cocos2d-x游戏引擎开发笔记(4)】系统动画
- 【Cocos2d-x游戏引擎开发笔记(10)】自定义场景和场景跳转
- 【Cocos2d-html5游戏引擎学习笔记(10)】自定义精灵动画
- 【Cocos2d-x游戏引擎开发笔记(4)】系统动画
- 【Cocos2d-x游戏引擎开发笔记(26)】中文和自定义字体
- 【Cocos2d-x游戏引擎开发笔记(16)】动画速度的控制
- 【Cocos2d-x游戏引擎开发笔记(26)】中文和自定义字体
- 【Cocos2d-x游戏引擎开发笔记(16)】动画速度的控制
- 【Cocos2d-x游戏引擎开发笔记(22)】TexturePacker的使用
- 【Cocos2d-x游戏引擎开发笔记(21)】CCHttpRequest联网
- 【Cocos2d-x游戏引擎开发笔记(7)】定时器
- 【iOS-Cocos2d游戏开发之二十一 】自定义精灵类并为你的精灵设置攻击帧(指定开始帧)以及扩展Cocos2d源码的CCAnimation简化动画创建!
- iphone游戏开发之cocos2d (七) 自定义精灵类,实现精灵动画CCAnimation
- 【Cocos2d-x游戏引擎开发笔记(14)】Tiled Map Editor(二)
- 【Cocos2d-x游戏引擎开发笔记(15)】Tiled Map Editor(三)
- 【iOS-Cocos2d游戏开发之二十一 】自定义精灵类并为你的精灵设置攻击帧以及动画创建!【一】
- 【Cocos2d-x游戏引擎开发笔记(13)】Tiled Map Editor(一)