cocos2d-x 3.0 中全部對象幾乎均可以用create函數來建立,其餘的建立方式也是有create函數衍生。html
下面來介紹下create函數建立通常對象的方法,免得開發中常常忘記啥的。數組
一、精靈Sprite的4種建立方式緩存
(1)根據圖片資源路徑來建立函數
?學習
1
2
3
4
|
//根據圖片路徑來建立
auto sprite1 = Sprite::create(filepath);
//根據圖片路徑來建立,並設置要顯示的圖片大小
auto sprite2 = Sprite::create(filepath,Rect(
0
,
0
,width,height));
|
(2)根據plist文件中的frame name建立,圖片名稱前要加#符號來區分字體
?動畫
1
2
|
//參數:幀名字,frame name
auto sprite = Sprite::create(
'#ball.png'
);
|
(3)根據緩存plist中的sprite frame來建立,這種用的比較多spa
?code
1
2
3
|
SpriteFrameCache::getInstance()->addSpriteFramesWithFile(
"loadingAndHP.plist"
,
"loadingAndHP.png"
);
//加載圖片資源做爲緩存
//從緩存圖片中根據圖片名字來建立
auto loading_bk=Sprite::createWithSpriteFrameName(
"loading_bk.png"
);
|
(4)根據紋理texture建立orm
1
2
3
4
5
6
|
//根據紋理圖片來建立
auto batch = SpriteBatchNode::create(
"Images/grossini_dance_atlas.png"
,
1
);
//加載緩存紋理
//根據紋理來建立精靈
auto sprite = Sprite::createWithTexture(batch->getTexture());
//根據紋理來建立精靈,並設置顯示區域大小
auto sprite = Sprite::createWithTexture(batch->getTexture(), Rect(x, y, width, height));
|
二、文字LabelTTF的建立方式
(1)根據字體、大小等多參數建立
1
2
3
4
5
6
|
auto center = LabelTTF::create(
"hello cocos2d-x"
,
//要顯示字符串
"Paint Boy"
,
//字體
32
,
//字號
Size(s.width/
2
,
200
),
//顯示的寬和高
TextHAlignment::CENTER,
//顯示的位置,定位
TextVAlignment::TOP);
|
(2)根據自定義對象FontDefinition來建立
1
2
3
4
5
6
7
8
9
10
11
12
|
FontDefinition shadowTextDef;
shadowTextDef._fontSize =
20
;
//字號
shadowTextDef._fontName = std::string(
"Marker Felt"
);
//字體
shadowTextDef._shadow._shadowEnabled =
true
;
//設置是否有陰影
shadowTextDef._shadow._shadowOffset = shadowOffset;
shadowTextDef._shadow._shadowOpacity =
1.0
;
//設置透明度
shadowTextDef._shadow._shadowBlur =
1.0
;
shadowTextDef._fontFillColor = tintColorRed;
// shadow only label
auto fontShadow = LabelTTF::createWithFontDefinition(
"Shadow Only Red Text"
, shadowTextDef);
//根據自定義的字體建立要顯示的內容
|
三、對於3.0中SpriteBatchNode,不鼓勵使用,文檔看這裏點擊打開連接,在此再也不贅述SpriteBatchNode的用法。
四、幀動畫建立方式
經過多張圖片文件來建立一個動畫,
1
2
3
4
5
6
7
8
9
|
Animation* animation = Animation::create();
animation->setDelayPerUnit(
1.0
/ fps);
for
(
int
i =
0
; i <= count; i++) {
const
char
*filename = String::createWithFormat(fmt, i)->getCString();
SpriteFrame* frame = SpriteFrameCache::getInstance()->spriteFrameByName(
filename);
animation->addSpriteFrame(frame);
}
|
Animation是由Sprite frame幀組、單個frame延時,持續時間等組成的,它是一組「數據」,而Animate是一個Action,它是基於Animation對象建立的。
五、序列幀動畫Sprite sheet animation
(1)經過.plist文件來建立
1
2
3
4
|
SpriteFrameCache::getInstance()->addSpriteFramesWithFile(filename);
//加載.plist文件到緩存中
AnimationCache* cache = AnimationCache::getInstance()->addAnimationsWithFile(filename);
//根據動畫.plist文件來建立動畫緩存
Animation* animation = cache->animationByName(filename);
//直接從緩存中建立動畫
Animate* animate = Animate::create(animation);
//生成動畫動做
|
(2)經過數組來建立
1
2
3
4
5
6
7
8
9
|
Array* animFrames = Array::createWithCapacity(
15
);
char
str[
100
] = {
0
};
for
(
int
i =
1
; i <
15
; i++)
{
sprintf(str,
"grossini_dance_%02d.png"
, i);
SpriteFrame* frame = cache->spriteFrameByName( str );
animFrames->addObject(frame);
}
Animation* animation = Animation::createWithSpriteFrames(animFrames,
0
.3f);
|
好了,這篇簡單介紹了遊戲中常常要用到的對象的建立方式,對於遊戲中的其餘元素,能夠參考遊戲源碼的demo中的建立方式,這個demo值得好好研究學習。