Cocos2d-x入门教程(三)CCSprite对象
紧接着上一节,我们来深入了解一下CCSprite对象,这个对象比较核心,在继续进行下面的学习之前我们需要对它有足够的了解。
与其说是了解CCSprite对象,其实是了解以CCSprite为中心的,同时包括与CCSprite紧密相关的一些对象,比如:CCContext2D,CCSpriteFrame等。
你可以新建一个场景类来写相关的代码,也可以利用之前已经有的,然后修改它们的init方法即可。出于保持现场的原因,我重新创建了一个SpriteObject的类。
CCSprite的创建:
一般我们通过CCSprite提供的工厂方法来创建CCSprite对象,而CCSprite提供了不止一个这样的方法,我们分别来看:
1.最简单的create(),该方法不带任何参数,通过它可以返回一个不带纹理的空CCSprite对象,当然创建成功之后你可以调用CCSprite对象的初始化方法进行初始化。
CCSprite * pSprite = CCSprite::create();
2.通过指定图片文件名来创建create(const char * pszFileName),该方法的参数是图片文件的资源位置。
CCSprite * pSprite = CCSprite::create("Alcedo256.jpg");
3.通过指定图片文件名并给出图片显示区域create (const char *pszFileName, const CCRect &rect),第二个参数是CCRect对象的引用。
CCRect rect; rect.setRect(0,0,100,100); CCSpriteFrame * pFrame = CCSpriteFrame::create("Alcedo256.jpg",rect); CCSprite * pSprite3 = CCSprite::createWithSpriteFrame(pFrame);
4.通过指定CCTexture2D材质对象来创建createWithTexture (CCTexture2D *pTexture),这里的参数类型是一个我们之前没见过的类。我们知道Cocos2d是基于显卡编程的,因此在创建显示对象时,我们实际上是通过纹理贴图来让它们拥有丰富的显示内容的。实际上纹理贴图才是CCSprite对象的内部显示原理,而之前的两个方法只是将纹理对象的创建封装到了内部。
为了创建纹理,我们首先需要一个CCImage对象,具体见下:
CCImage * image = new CCImage(); image->initWithImageFile("Alcedo256.jpg",CCImage::kFmtJpg);//指定图片路径和图片格式 CCTexture2D * tex = new CCTexture2D(); tex->initWithImage(image);
这样一个纹理便可用了:
CCSprite * pSprite2 = CCSprite::createWithTexture(tex);
5.通过上面的方法创建出来的CCSprite对象的显示区域为整个纹理,通过createWithTexture (CCTexture2D *pTexture, const CCRect &rect)方法可以给CCSprite对象指定显示区域:
CCRect rect; rect.setRect(0,0,100,100); CCSprite * pSprite2 = CCSprite::createWithTexture(tex,rect);
6.最后我们来看通过CCSpriteFrame对象创建CCSprite的两个方法:createWithSpriteFrame (CCSpriteFrame *pSpriteFrame)和createWithSpriteFrameName (const char *pszSpriteFrameName),其实主要是前一个方法。
这里的关键是CCSpriteFrame是什么?CCSpriteFrame拥有一个纹理对象(CCTexture2D)和一个矩形对象(CCRect),我们可以将它理解为CCSprite和CCTexture2D的中间者,CCSprite通过CCSpriteFrame来了解需要显示的内容以及显示的区域。具体地:
CCRect rect; rect.setRect(0,0,100,100); CCSpriteFrame * pFrame = CCSpriteFrame::create("Alcedo256.jpg",rect); CCSprite * pSprite3 = CCSprite::createWithSpriteFrame(pFrame);
至于createWithSpriteFrameName (const char *pszSpriteFrameName)方法则是通过给定CCSpriteFrame的名称来创建CCSprite,不过这个名称不是任意的,你需要事先注册过。CCSpriteFrameCache提供了缓存CCSpriteFrame的功能,它有一套管理CCSpriteFrame对象的方法。
最后介绍一个设置锚点(注册点的方法):setAnchorPoint (const CCPoint &anchor)。
我们知道默认的显示对象的锚点在现实对象的中心,通过这个方法我们可以改变锚点的相对位置,说相对的原因时我们需要提供的参数是一个百分比:
setAnchorPoint(ccp(0,0)); setAnchorPoint(ccp(0.5,0.5));
上面的两个操作分别将显示对象的锚点设置为左下角和中心点。
资源地址:https://github.com/Physwf/physwf-c-lab/tree/master/Cocos2d-x%20Tutorial/3