MyLayer.h
class MyLayer: public CCLayer
{
public:
CREATE_FUNC(MyLayer);
//static MyLayer *create();
static CCScene *scene();
bool init();
};
非常简单的一个层,和上一章所讲的HelloWorldScene是一样的。由于是之前写的代码,所以就带上了CC的前缀,在这里就不做赘述。
MyLayer.cpp
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()即可。
CCScene *MyLayer::scene()
{
CCScene *scene = CCScene::create();
MyLayer *layer = MyLayer::create();
scene->addChild(layer);
return scene;
}
至于scene()方法的实现与上一章所讲的createScene()是一样的,同样不多费口舌。
精灵的创建方法有很多,这里的Sprite::create()自然是最简单的一种,下面介绍几种方法:
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代表的是精灵显示纹理,至于什么是纹理,以后在单独总结。