我正在开发手绘游戏,绘图不是很流畅,我用了下面的代码:
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
请帮我画得流畅些。
谢谢
发布于 2015-02-09 15:32:49
正如纳达里安所说,你不应该在每次绘制雪碧图时都创建一个新的雪碧图。即使你不能重用相同的精灵,你也可以从相同的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);发布于 2015-05-27 21:17:59
我找到了这个实现,希望它能对您有所帮助:http://build-failed.blogspot.it/2012/08/freehand-drawing-with-cocos2d-x-and.html
https://stackoverflow.com/questions/26593159
复制相似问题