我正在开发写意画游戏,画面不是很流畅,我使用了这段代码:
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 :(得分: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)