1、前一篇文章最后,运行程序后窗口内一片黑,没有任何内容。是因为场景内没有添加任何东西,现在就来逐一添加相应的内容。
2、首先,来添加背景图片和文字,使用两个类:CCSprite和CCLabelTTF
(1)代码如下:
#include"MyHelloWorldScene.h"
USING_NS_CC;
bool
MyHelloWorldScene::init()
{
bRct=
false
;
do
{
CC_BREAK_IF(!CCScene::init());
//获取窗口尺寸
CCSizevisibleSize=CCDirector::sharedDirector()->getVisibleSize();
CCPointorigin=CCDirector::sharedDirector()->getVisibleOrigin();
//背景
CCSprite*pSprite=CCSprite::create(
"HelloWorld.png"
);
pSprite->setPosition(ccp(visibleSize.width/2+origin.x,visibleSize.height/2+origin.y));
this
->addChild(pSprite,0);
//文字
CCLabelTTF*pLabel=CCLabelTTF::create(
"HelloWorld"
,
"Arial"
pLabel->setPosition(ccp(origin.x+visibleSize.width/2,
origin.y+visibleSize.height-pLabel->getContentSize().height));
->addChild(pLabel,1);
true
;
}
while
(0);
return
bRct;
}
|
(2)坐标系:上述代码中涉及到坐标的问题,主要是setPosition这个函数的参数如何确定的问题。
(3)一般来说,坐标原点在左上角,往右是x轴,往下是y轴;但是在Cocos2d中,坐标原点在左下角,同样是x轴向右,y轴向下。
(4)实际上,坐标系除了x、y两个方向,还有一个z方向,这样构成一个立体的空间:
笛卡尔坐标系
(4)setPosition函数,设置的是精灵的位置,这个位置是二维的,也就是一个由x、y构成的平面内的位置,那么z方向体现在哪儿呢?体现在另一个函数addChild中,这个函数有一个int型的参数zOrder,就是我们通常说的z序,也就是精灵(或是别的内容)在z轴方向上的位置。可是尝试将文字的z序设置的比背景的小,这时文字就在背景后面了,当然显示的时候就看不见了。
(5)关于CCDirector::sharedDirector()这句将会反复的使用,它是导演,一切场景由它来控制。当然此处,是通过它获得显示尺寸;
(6)我们设置背景的时候,是刚好充满整个屏幕的,那么如何确定setPosition的参数呢?许多人的第一反应也许是(0,0),当然此处显然不是如此;这里的坐标实际上应该是精灵中心(对角线交点)的坐标(240,160)。
(7)关于这句CCDirector::sharedDirector()->getVisibleOrigin();貌似获取到的就是坐标原点(0,0),好像没有什么意义,实际上涉及到另外一些更复杂的坐标知识,你可以想象一个游戏的地图不可能只是窗口显示的那么点大,此时的坐标该如何描述位置呢?在此先略过不提。
(8)根据以上内容,尝试将文字“HelloWorld”移动到下侧:
3、本文总结
(1)继上文详细介绍init中的背景和文字,即往空的场景中添加内容;
原文链接:https://www.f2er.com/cocos2dx/346032.html