关于CCSprite、CCSpriteFrame、 CCSpriteFrameCache以及CCSpriteBatchNode的关系

CCSprite被应用关于当个的显示对象,一般不用于动画,也就是如果你要创建一个简单的显示对象你可以使用CCSprite

CCSpriteFrame主要的作用是用于动画中的某一帧.

CCSpriteFrameCache自然他表示的是动画中的一帧的组合。

其中,CCSpriteFrame与CCSpriteFrameCache的关系就像CCTexture2d与CCTextureCache的关系是一样的。

在CCAnimation中的每一帧你必须使用的是CCSpriteFrame,而不能使用CCSprite.

其实CCSprite和CCSpriteFrame是可以相互转化的:

(CCSpriteFrame==>CCSprite)

CCSprite * sprite = CCSprite::createWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("UNIT_1004_2_0014"));

(CCSprite==>CCSpriteFrame)

CCTexture2D * texture2D = sprite->getTexture();
CCSpriteFrame * frame = CCSpriteFrame::createWithTexture(texture2D,CCRect(0,0,100,100));

[1]对于生成序列帧动画,如果使用的是单独的图片组成的动画:


CCTexture2D *pRunImage=CCTextureCache::sharedTextureCache()->addImage("C:\\Users\\tannertan\\Desktop\\2012030212261559.png");
CCSpriteFrame * pRun[16];


for (int i=0;i<4;i++)  //行循环
{
for (int j=0;j<4;j++)  //列循环,将图片保存在帧中
{
//每张图片大小为64×64
pRun[n]=CCSpriteFrame::create("C:\\Users\\tannertan\\Desktop\\2012030212261559.png",CCRectMake(j*128/8,i*192/8,128/8,192/8));
CCSprite * sprite = CCSprite::create();
sprite->initWithSpriteFrame(pRun[n]);
n++;                    
}
}
CCArray *pArr=CCArray::createWithCapacity(16);
for (int i=0;i<16;i++)
{
pArr->addObject(pRun[i]);
}
CCAnimation *pRunAnimation=CCAnimation::createWithSpriteFrames(pArr, 0.5f);
CCSprite *pSakuya=CCSprite::create("E:\\SGZLW\\sgzlw_proj\\trunk\\ResourceCenter\\graphics\\battleParts\\battleMap\\BG_0001.jpg",CCRectMake(0,0,128/8,192/8));//精灵第一帧
pSakuya->setPosition(ccp(100,200));
this->addChild(pSakuya,2);
CCAnimate *pRunDouga=CCAnimate::create(pRunAnimation);
pSakuya->runAction(CCRepeatForever::create(pRunDouga));  //无限循环播


[2]如果是一个png加上一个plist文件的动画,一般的形式是以下的样子:

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("E:\\SGZLW\\sgzlw_proj\\trunk\\ResourceCenter\\graphics\\battleParts\\battleUnit\\UNIT_1004_2.plist",
"E:\\SGZLW\\sgzlw_proj\\trunk\\ResourceCenter\\graphics\\battleParts\\battleUnit\\UNIT_1004_2.png" );
CCSpriteFrameCache * spriteCache = CCSpriteFrameCache::sharedSpriteFrameCache();
CCSprite * sprite = CCSprite::createWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("UNIT_1004_2_0014"));
sprite->setPosition(ccp(visibleSize.width/2 , visibleSize.height/2));
CCTexture2D * texture2D = sprite->getTexture();
CCSpriteFrame * frame = CCSpriteFrame::createWithTexture(texture2D,CCRect(0,0,100,100));
this->addChild(sprite);

现在还没有搞清楚Animation和AnimationCache怎么用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值