cocos2d-x中的精灵类

前端之家收集整理的这篇文章主要介绍了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,i);
        SpriteFrame *fname = cache -> spriteFrameByName( str );
        sfme.pushBack( fname );
    }

    CCAnimation *animation = CCAnimation::createWithSpriteFrames( sfme,0.05f );
    sp -> runAction ( CCAnimate::create(animation ));

猜你在找的Cocos2d-x相关文章