Cocos2d-x平滑绘图

时间:2014-10-27 17:21:35

标签: drawing cocos2d-x smooth cocos2d-x-3.0

我正在开发写意画游戏,画面不是很流畅,我使用了这段代码:

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

请帮我顺利画画

由于

2 个答案:

答案 0 :(得分:1)

正如Nadarian所说,每次画画时都不应该创建新的精灵。 即使你不能重复使用相同的sprite,你也可以从同一个SpriteFrame创建sprite。

首先,您需要将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);

答案 1 :(得分:0)

我已经找到了这个实现,希望它能帮到你:http://build-failed.blogspot.it/2012/08/freehand-drawing-with-cocos2d-x-and.html