2014-10-27 51 views
0

我開發徒手繪製的遊戲,圖形不是很順利,我用這個代碼:的Cocos2D-X平滑的描畫

void Canvas::onTouchMoved(cocos2d::Touch *touch, cocos2d::Event *event) { 
    Canvas::drawEvenlySpacedSprites(touch->getLocation(),touch->getPreviousLocation()); 

    } 


void Canvas::drawEvenlySpacedSprites(Vec2 start, Vec2 end) { 
    // begin drawing to the render texture 
    _target->begin(); 
     float distance = start.getDistance(end); 
     if (distance > 1) { 
      int d = (int)distance; 

      for (int i = 0; i < d; i++) 
      { 
       float difx = end.x - start.x; 
       float dify = end.y - start.y; 
       float delta = (float)i/distance; 

       Sprite * sprite = Sprite::create("brush3.png"); 
       sprite->setColor(Color3B::BLUE); 
       sprite->setPosition(Vec2(start.x + (difx * delta), start.y + (dify * delta))); 
       sprite->visit(); 

     } 
    } 

    // finish drawing and return context back to the screen 
_target->end(); 



} 

我用的cocos2d-x V3.3工作

請幫助我獲得平滑的描畫

感謝

+0

第一所有你不應該創建一個新的雪碧,每次你畫。在某個init中創建一次,然後重新使用它。根據問題你使用一些設備來測試代碼或者你在模擬器上運行它? – Nadarian 2014-10-29 14:56:35

+0

謝謝,我使用設備進行測試,並且在cocos2d-x v3中,如果您知道如何重新使用相同的精靈,請幫助我。 – user3895008 2014-10-30 06:03:31

回答

1

由於Nadarian說,你不應該創建一個新的Sprite每次繪製時間。 即使無法重複使用相同的精靈,也可以從相同的SpriteFrame創建精靈。

首先,您需要將SpriteFrame存儲在某個變量上。或者,你可以使用SpriteFrameCache。 我將顯示將使用SpriteFrame的代碼。

// create sprite 
auto sprite = cocos2d::Sprite::create("brush3.png"); 
// get spriteframe from sprite 
auto spriteframe = sprite->getSpriteFrame(); 

Canvas::drawEvenlySpacedSprites,從存儲的spriteframe創建雪碧。

這裏的例子中,該代碼

Sprite * sprite = Sprite::create("brush3.png"); 

改變這個代碼,

Sprite * sprite = Sprite::createWithSpriteFrame(spriteframe);