如何使用Cocos2D-X绘制一条线?

11

我一直在电脑上玩弄Cocos2D-X,我已经能够在我想要构建它的所有设备上构建hello world程序。

我知道如何让程序显示精灵和标签,但是我一直没有办法让程序绘制一条线。我该如何在Cocos2D-X中绘制一条线?

5个回答

10

使用在CCDrawingPrimitives.h中声明的void ccDrawLine(const CCPoint& origin, const CCPoint& destination)函数。

编辑

我自己从未尝试过使用基本图形。但是,据我所知中的所有东西都是通过CCNode或其子类进行渲染的。因此,您必须将代码放置在某个CCNode或其子类的draw方法内。


我已经包含了CCDrawingPrimitives.h,并在我的代码中编写了ccDrawLine(CCPoint(0.3f,0.3f),CCPoint(77.7f,77.7f)); 但是当我运行应用程序时,我看不到任何视觉差异。我是否遗漏了一些明显的东西? - Jon
顺便说一下,我遇到了以下问题。我写了:this->colorLayer->initWithColor( ccc4( 100, 100, 100, 255 ) ),所以由于Z-order,我没有看到任何用ccDrawLine绘制的东西。然后我只是将其更改为:this->colorLayer->init();,现在一切都显示正常 :) - JavaRunner

7

在draw()函数中必须使用ccDrawLine函数。

示例:

void GameLayer::draw()
{
    //red line from bottom left to top right corner
    cocos2d::ccDrawColor4F(1.0f, 0.0f, 0.0f, 1.0f);
    cocos2d::ccDrawLine(ccp(0,0), ccp(100, 100));
}

请记住,图层必须为空,因为它会先调用第一次绘制,然后绘制子元素,所以如果你有子元素,它将覆盖你所绘制的内容。
Z顺序:)
因此,在您的代码中,您有一个类。
class MyLayer : public CCLayer
{
    ... //your code
    init()
    {
         CCLayer* pLayer = new GameLayer(); //It will be debug layer :)
     addChild(pLayer);//Alse you can set here Z order.
     pLayer->release();
    }
    virtual void draw()
    {
         //red line from bottom left to top right corner
         ccDrawColor4F(1.0f, 0.0f, 0.0f, 1.0f);
         ccDrawLine(ccp(0,0), ccp(100, 100));
    }
}

上述代码将绘制您所需的内容。

1
如果我的图层不为空,我就不能绘制。 - einverne
4
您可以这样做,但可能会导致您的子项被遮挡。可以尝试修改子项的层次顺序,或者覆盖visit方法并在最后绘制。 - Gelldur
非常感谢。但是我对多层有点困惑。 - einverne
draw()方法在最新版本中已经被更改。请参考http://stackoverflow.com/questions/23557033/cocos2d-x-v3-cannot-override-forward-function-draw - DLight

7

我发现另一种在CCLayer中绘制线条的简单方法。Cocos2d-x有一个名为CCDrawNode的类。您可以在此处查看参考here。而且,使用该函数非常容易:

void drawSegment(const CCPoint & from,
    const CCPoint & to,
    float   radius,
    const ccColor4F & color 
)

小例子:

CCDrawNode* node = CCDrawNode::create();
addChild(node,10);//Make sure your z-order is large enough
node->drawSegment(fromPoint,toPoint,5.0,ccc4f(180,180,180,100));

2
auto node = DrawNode::create();
node->drawLine(Vec2(200, 200), Vec2(200, 500), Color4F(1.0, 1.0, 1.0, 1.0));
this->addChild(node);

1
在 alpha中,您可以使用以下内容:
DrawPrimitives::drawLine(const cocos2d::Point &origin, const cocos2d::Point &destination);

在我看来,您可以并且应该使用cocos2d-x 3.x,但是OOTB中DrawPrimitives::drawLine(const cocos2d::Point &origin, const cocos2d::Point &destination);无法正常工作。请参考https://dev59.com/X33aa4cB1Zd3GeqPitnk#22724319。 - John

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接