Как сделать строку с помощью Cocos2D-X?

Я играю с Cocos2D-X на своем компьютере, и у меня есть его, чтобы создать глобальную программу hello на всех устройствах, на которых я хотел бы построить его.

Я знаю, как заставить программу отображать спрайт и отображать метку, но мне не удалось просто заставить программу нарисовать линию. Как я могу нарисовать линию в Cocos2D-X?

Ответ 1

использовать void ccDrawLine(const CCPoint& origin, const CCPoint& destination) функцию, объявленную в CCDrawingPrimitives.h

Edit

Я никогда не пробовал использовать примитивы. Но поскольку я знаю, что все в cocos2d отображается в CCNode или подклассе. Поэтому вы должны поместить свой код внутри метода draw для некоторого CCNode или его подкласса.

Ответ 2

Вы должны использовать функцию ccDrawLine в draw()

Пример

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));
    }
}

Выше кода будет рисовать то, что вы хотите.

Ответ 3

Я нашел еще один простой способ рисовать линию в CCLayer. Cocos2d-x имеет класс CCDrawNode. Вы можете проверить ссылку здесь. И очень просто использовать функцию:

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));

Ответ 4

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

Ответ 5

В cocos2d-x 3.0 alpha вы можете использовать

DrawPrimitives::drawLine(const cocos2d::Point &origin, const cocos2d::Point &destination);