cocos2d-x中的精灵类

在cocos2d-x中,精灵处理有关的类共有4个:
精灵类CCSprite、精灵批处理类CCSpriteBatchNode、精灵帧类CCSpriteFrame和精灵帧缓存类CCSpriteFrameCache

在精灵类CCSprite中,创建精灵的方式有:

static Sprite* create(const std::string& filename);
static Sprite* createWithTexture(Texture2D *texture);
static Sprite* createWithSpriteFrame(SpriteFrame *spriteFrame);
static Sprite* createWithSpriteFrameName(const std::string& spriteFrameName);

第一个函数是利用图片文件的文件名,第二个是利用图片纹理信息创建精灵,第三和第四个是利用精灵帧和精灵帧名来创建函数。通过查看各个函数的源代码可以发现,这四个函数最终都会进入函数

bool Sprite::initWithTexture(Texture2D *texture, const Rect& rect, bool rotated)

实际上这四个方法最终都是利用图像的纹理信息来创建精灵。

精灵批处理类CCSpriteBatchNode:它可以一次性渲染多副图像,可以降低图像渲染的次数,防止渲染次数过多造成的延时。

CCSpriteBatchNode* batchNode = CCSpriteBatchNode::create("black.png", 1000);
    batchNode->setPosition(CCPointZero);
    this->addChild(batchNode);
    for (int i = 0; i<1000; ++i){
        float x = CCRANDOM_0_1()*visibleSize.width;
        float y = CCRANDOM_0_1()*visibleSize.height;
        CCSprite* testIcon = CCSprite::createWithTexture(batchNode->getTexture());
        testIcon->setPosition(ccp(x, y));
        batchNode->addChild(testIcon);
    }

效果图如下:
这里写图片描述

精灵帧类CCSpriteFrame构造的对象可以是图像的某一部分,可以通过构造一系列精灵帧对象形成动画,常与精灵帧缓存类CCSpriteFrameCache一起使用来形成动画。

精灵帧缓存类CCSpriteFrameCache使用单例模式,通过读入plist文件来快速加载精灵帧,plist文件记录了每幅图像在合成的大图像中的信息,这样可以一次渲染多幅图像。

CCSpriteFrameCache * cache = CCSpriteFrameCache::sharedSpriteFrameCache();
    cache->addSpriteFramesWithFile("ghosts.plist");
//利用plist文件中的图片信息可以一次渲染所有图片
    char str[20] = { 0 };
    for (int i =1; i<=4; ++i){
        float x = CCRANDOM_0_1()*visibleSize.width;
        float y = CCRANDOM_0_1()*visibleSize.height;
        sprintf(str, "icon%d.gif", i);
        CCSprite *sp = CCSprite::createWithSpriteFrameName(str);
        sp->setPosition(x, y);
        this->addChild(sp);
    }   

效果图如下:
这里写图片描述
该类还可以得到一系列图片构成的一组精灵帧,利用这些精灵帧和CCAnimation类中的函数可以形成动画。

Vector< SpriteFrame* > sfme = Vector< SpriteFrame* >::Vector(4);
    char str[20] = {0};
    for( int i = 1 ; i <=4 ; ++i )
    {
        sprintf(str,"icon%d.gif",i);
        SpriteFrame *fname = cache -> spriteFrameByName( str );
        sfme.pushBack( fname );
    }

    CCAnimation *animation = CCAnimation::createWithSpriteFrames( sfme , 0.05f );
    sp -> runAction ( CCAnimate::create(animation ));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值