[Cocos2D-x For WP8]Sprite精靈__cocos2d-x

來源:互聯網
上載者:User

http://www.cnblogs.com/linzheng/p/3292684.html

加菲貓 Just have a little faith. [Cocos2D-x For WP8]Sprite精靈

    精靈(Sprite)是遊戲裡面的角色,比如敵人,遊戲裡面運動的物體等等,所以精靈是遊戲裡面一個非常常見的概念,幾乎無處不在。在Cocos2D-x裡面精靈是用CCSprite類來進行表示的,它可以用一張圖片或者一張圖片的一塊矩形部分來定義。我們可以通過下面的代碼用一張圖片資源建立一個精靈,然後把它添加到遊戲中:

CCSprite *b = CCSprite::create("cat.png");b->setPosition(ccp(s.width * 0.5, s.height * 0.5));

    如果你需要產生多個相同的精靈那麼就可以利用精靈批處理類CCSpriteBatchNode類來進行處理,那麼這樣的處理方式可以提高精靈的繪製效率的,需要繪製的精靈數量越多,效果越明顯。CCSpriteBatchNode是把多個精靈放到一個紋理上,繪製的時候直接統一繪製該紋理,不需要單獨繪製子節點,這樣繪製的時候就可以節省了多次對圖片資源重複開啟關閉的時間。CCSpriteBatchNode內部封裝了一個CCTextureAtlas(紋理圖集,它內部封裝了一個CCTexture2D)和一個CCArray(用來儲存CCSpriteBatchNode的子節點:單個精靈)。注意:因為繪製的時候只open-close一次,所以CCSpriteBatchNode對象的所有子節點都必須和它是用同一張圖片。

    不過使用CCSpriteBatchNode有一個限制,就是所使用的圖片必須來自同一個檔案,如果使用一張圖片來建立精靈,你將不能指定精靈的深度,這樣,所有的精靈都必須在同一渲染層,不過你可以使用貼圖集來避免這個問題,如果你的所有貼圖都在同一個檔案裡,那麼你只需建立一個CCSpriteBatchNode就可以了。紋理貼圖集是將我們需要的部分圖片放在一張大小固定的圖片,可以節約記憶體。因為OpenGL 機制會把單張圖處理成相應大小的長寬都是2 的n 次方的圖片,所以把圖片放在一起可以節約空間。可以使用Zwoptex工具來製作這樣的貼圖。

    貼圖類CCTexture2D 是關於OpenGL 的概念。在OpenGL 中稱圖片為貼圖,在Cocos2D-x 中CCTexture2D 就是圖片對象的意思,可以通過它建立精靈等對象。CCTexture2D 類是精靈類和其相關類的基礎。

    那麼除此之外還有精靈幀類CCSpriteFrame,精靈幀緩衝類CCSpriteFrameCache。精靈幀的概念是相對於動畫而產生的。一個精靈是固定的節點,它可以擁有許多精靈幀(CCSpriteFrame),在它們之間切換就形成了動畫。精靈幀緩衝類CCSpriteFrameCache 用來儲存精靈幀,提前緩衝起來有助於提高程式的效率。 CCSpriteFrameCache是一個單例模式,不屬於某個精靈,是所有精靈共用使用的。

    下面我們通過樣本來用一張貼圖來產生精靈:

TestLayer::TestLayer(){    CCSize s = CCDirector::sharedDirector()->getWinSize();    //通過圖片建立2D紋理    CCTexture2D *texture = CCTextureCache::sharedTextureCache()->addImage("dragon_animation.png");    // 通過2D紋理來建立精靈幀,可以通過矩形座標來截取2D紋理的某個地區    CCSpriteFrame *frame0 = CCSpriteFrame::createWithTexture(texture, CCRectMake(132*0, 132*0, 132, 132));    CCSpriteFrame *frame1 = CCSpriteFrame::createWithTexture(texture, CCRectMake(132*1, 132*0, 132, 132));    CCSpriteFrame *frame2 = CCSpriteFrame::createWithTexture(texture, CCRectMake(132*2, 132*0, 132, 132));    CCSpriteFrame *frame3 = CCSpriteFrame::createWithTexture(texture, CCRectMake(132*3, 132*0, 132, 132));    CCSpriteFrame *frame4 = CCSpriteFrame::createWithTexture(texture, CCRectMake(132*0, 132*1, 132, 132));    CCSpriteFrame *frame5 = CCSpriteFrame::createWithTexture(texture, CCRectMake(132*1, 132*1, 132, 132));    //通過精靈幀建立精靈    CCSprite* sprite0 = CCSprite::createWithSpriteFrame(frame0);    sprite0->setPosition( ccp( 100, s.height/2) );    addChild(sprite0);    CCSprite* sprite1 = CCSprite::createWithSpriteFrame(frame1);    sprite1->setPosition( ccp(200, s.height/2) );    addChild(sprite1);    CCSprite* sprite2 = CCSprite::createWithSpriteFrame(frame2);    sprite2->setPosition( ccp(300, s.height/2) );    addChild(sprite2);    CCSprite* sprite3 = CCSprite::createWithSpriteFrame(frame3);    sprite3->setPosition( ccp(400, s.height/2) );    addChild(sprite3);    CCSprite* sprite4 = CCSprite::createWithSpriteFrame(frame4);    sprite4->setPosition( ccp(500, s.height/2) );    addChild(sprite4);    CCSprite* sprite5 = CCSprite::createWithSpriteFrame(frame5);    sprite5->setPosition( ccp(600, s.height/2) );    addChild(sprite5);}

貼圖的圖片:

啟動並執行效果:

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.