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

posted @ 2013-04-29 16:26  Joe Physwf  阅读(3133)  评论(0编辑  收藏  举报