Cocos2d-x入门教程三CCSprite对象

原文链接:http://www.cnblogs.com/physwf/archive/2013/04/29/3045293.html

紧接着上一节,我们来深入了解一下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

转载于:https://www.cnblogs.com/physwf/archive/2013/04/29/3045293.html

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...