cocos2d-x 如何从某一帧开始循环播放动画

神之者 2013-04-14 04:03:00


最近学习了cocos2d-x做动画,但是遇到了点问题。

比如我这里有一幅人物跑步的图。
我们可以看出,第一行人物是准备开始跑步的动作,第二行和第三行才是人物跑步时交替的动作。

我想问一下各位前辈,有什么函数可以让我在某几帧之内循环播放,而不是从头开始播放么?

因为跑步的时候,起跑的动作播放过了就不能再播放,要在第二和第三行之间循环。

我的动画播放代码是这样写的(是从 无脑码农 的视频里学来的,但他的是无限循环播放,我不想让我的动画每次都从第一帧开始)

int n=0;

CCTexture2D *pRunImage=CCTextureCache::sharedTextureCache()->addImage("run.png");
CCSpriteFrame *pRun[24]; //图片一共24张

for (int i=0;i<3;i++) //行循环
{
for (int j=0;j<8;j++) //列循环,将图片保存在帧中
{
//每张图片大小为64×64
pRun[n]=CCSpriteFrame::create("run.png",CCRectMake(j*64,i*64,64,64));
n++;
}
}

CCArray *pArr=CCArray::createWithCapacity(24);

for (int i=0;i<24;i++)
{
pArr->addObject(pRun[i]);
}

CCAnimation *pRunAnimation=CCAnimation::createWithSpriteFrames(pArr,0.05f);
CC_BREAK_IF(!pRunAnimation);

CCSprite *pSakuya=CCSprite::create("run.png",CCRectMake(0,0,64,64));//精灵第一帧
CC_BREAK_IF(!pSakuya);

pSakuya->setPosition(ccp(100,200));
this->addChild(pSakuya,2);

CCAnimate *pRunDouga=CCAnimate::actionWithAnimation(pRunAnimation);
CC_BREAK_IF(!pRunDouga);

pSakuya->runAction(CCRepeatForever::create(pRunDouga)); //无限循环播放


我自己想了一个不太可行的方法,就是把这整张图拆成2部分,第一部分是起跑动作,也就是第一行,第二部分是跑步动作。
这样,再播放完第一部分的图后不循环,开始播放第二部分的图,让第二部分的图循环。
但是这样的话,代码量就翻倍了,所以感觉不太可行,应该会有从某一帧开始循环播放动画的函数,但是我没有查到是哪一个。

所以想问一下各位前辈,cocos2d-x中有什么方法可以从某一帧开始循环播放动画,而不是从头开始。
...全文
4051 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
woyaowenzi 2013-07-30
  • 打赏
  • 举报
回复
引用 4 楼 a609819058 的回复:
果然是大神啊,膜拜啊,希望还能看到大神的著作。
大神在哪里?
李来阳 2013-07-22
  • 打赏
  • 举报
回复
按时打算啊啊
a609819058 2013-06-13
  • 打赏
  • 举报
回复
果然是大神啊,膜拜啊,希望还能看到大神的著作。
Reno_007 2013-04-20
  • 打赏
  • 举报
回复
你的问题: cocos2d-x中有什么方法可以从某一帧开始循环播放动画,而不是从头开始 很简单的,在这里 CCSprite *pSakuya=CCSprite::create("run.png",CCRectMake(0,0,64,64));//精灵第一帧 选择你的第一帧, 在这里 pArr->addObject(pRun[i]); 添加你要添加的图片动画,那样你不是可以任意控制你要播放的序列动画了。
菜牛 2013-04-14
  • 打赏
  • 举报
回复
创建两个或多个动画序列。
奇乐二二二 2013-04-14
  • 打赏
  • 举报
回复
可以用CCSequence来实现, CCSequnece *sq = CCSequence::create(.........., NULL); 然后CCReqeatForever* forever = CCReqeatForever::create(static_Cast<CCReqeatForever*>sq); CCSprite::create("")->runAction(forever); sq放到forever里面的时候记得强转一下。 这样就可以无限跑了, 队列里面每一帧怎么执行可以按照自己需求

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧