Cocos2dx学习笔记(2)——精灵的创建

这一章讲学习怎么创建精灵,以及对于精灵的初始化方法

本文仅供个人记录和复习,不用于其他用途

MyLayer.h

1
2
3
4
5
6
7
8
9
class MyLayer: public CCLayer
{
public:
CREATE_FUNC(MyLayer);
//static MyLayer *create();
static CCScene *scene();
bool init();
};

非常简单的一个层,和上一章所讲的HelloWorldScene是一样的。由于是之前写的代码,所以就带上了CC的前缀,在这里就不做赘述。

MyLayer.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool MyLayer::init()
{
if (!CCLayer::init()) //如果父类初始化失败,返回false
{
return false;
}
//父类初始化成功
//获取屏幕尺寸
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
//创建精灵
CCSprite *spr = CCSprite::create("bg.png");
spr->setPosition(ccp(winSize.width / 2, winSize.height / 2));
addChild(spr);
return true;
}

这里的init()比之上一章要丰富许多。判断父类初始化不用多说,至于winSize是用于存储窗口的大小。这里可以通过Director的单例来获取窗口大小,即Director::getInstance()->getWinSize()。接下来便是创建精灵,上一章讲过,除了可以添加CocosStudio中生成的csb文件,一般来说都是通过创建精灵来加入图片等元素。我们创建一个指向精灵的指针,并用bg.png来初始化精灵。这里要注意的是,文件的初始路径指定为工程文件下的Resources。如果还有更深一层的目录,用“/”来隔开。

初始化了精灵,我们可以使用setPostion()来设定精灵位置。所谓的ccp是一个宏,用于坐标的参数设定,包含长和宽两个参数(也就是x和y)。这里我们利用事先获得的winSize将精灵位置设置为窗口正中央。另外,别忘记将精灵加入层。由于是层的init()方法,直接使用addChild()即可。

1
2
3
4
5
6
7
CCScene *MyLayer::scene()
{
CCScene *scene = CCScene::create();
MyLayer *layer = MyLayer::create();
scene->addChild(layer);
return scene;
}

至于scene()方法的实现与上一章所讲的createScene()是一样的,同样不多费口舌。

精灵的创建方法有很多,这里的Sprite::create()自然是最简单的一种,下面介绍几种方法:

1
2
3
4
static CCSprite *create(const char *pszFileName);
static CCSprite *create(const char *pszFileName, const CCRect &rect);
bool initWithFile(const char *pszFileName);
bool initWithFile(const char *pszFileName, const CCRect &rect);

前两种是静态工厂方法,后两种是精灵的初始化方法。另外,rect代表的是精灵显示纹理,至于什么是纹理,以后在单独总结。