用cocos2d-x绘制平滑的贝塞尔曲线

Draw smooth Bezier curve with cocos2d-x

本文关键字:曲线 cocos2d-x 绘制 平滑      更新时间:2023-10-16

这个问题可能重复,但我不知道如何在我的应用程序中应用这种方法,也不知道应该在cocos2d-x中使用哪种方法来绘制贝塞尔曲线。我的应用程序应该允许用户在触摸画布时绘制线条和曲线。我怎样才能做到这一点?

从Cocos2dx v3.3,您可以使用DrawNode绘制Bezier曲线。检查DrawPrimitivesTest.cpp,它非常容易使用。这只是从上述文件中提取的一个示例脚本。你可以在你的场景中的任何地方使用它:

auto draw = DrawNode::create();
addChild(draw, 10);
auto s = Director::getInstance()->getWinSize();
draw->drawQuadBezier(Vec2(0, s.height), Vec2(s.width/2, s.height/2), Vec2(s.width, s.height), 50, Color4F(CCRANDOM_0_1(), CCRANDOM_0_1(), CCRANDOM_0_1(), 0.5));  
draw->drawCubicBezier(VisibleRect::center(), Vec2(VisibleRect::center().x+30,VisibleRect::center().y+50), Vec2(VisibleRect::center().x+60,VisibleRect::center().y-50),VisibleRect::right(),100, Color4F(CCRANDOM_0_1(), CCRANDOM_0_1(), CCRANDOM_0_1(), 0.5));

在CCDrawPrimitives.cpp文件中。

你可以使用这个方法。

ccDrawCubicBezier
ccDrawQuadBezier

-MyClass::draw() {
    glLineWidth(4.0f);
    ccPointSize(4);
    //Draw a blue quadratic bezier curve
    ccDrawColor4B(0, 0, 255, 255);
    ccDrawQuadBezier(ccp(90,0), ccp(200, 70), ccp(350,0), 12);
    //Draw cubic red bezier curve
    ccDrawColor4B(255, 0, 0, 255);
    ccDrawCubicBezier(ccp(100,100), ccp(300,150), ccp(250,50), ccp(350,100), 12);
    //Restore original values
    glLineWidth(1);
    ccDrawColor4B(255,255,255,255);
    ccPointSize(1);
}

您可能知道,每次移动触摸位置时,都会调用ccTouchesMoved方法
可以使用方法和成员变量控制曲线形状。