cocos2d-x 3.0 經常使用對象的建立方式

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值得好好研究學習。

相關文章
相關標籤/搜索