How do I draw a line using Cocos2D-X?
-
21-06-2021 - |
Question
I have been playing around with Cocos2D-X on my computer, and I have got it to build the hello world program on all the devices I would like to be able to build it on.
I know how to make the program display a sprite, and display a label, but I have not been able just to get the program to draw a line. How can I draw a line in Cocos2D-X?
Solution
use void ccDrawLine(const CCPoint& origin, const CCPoint& destination)
function declared in CCDrawingPrimitives.h
Edit
I've never tried using primitives myself. But as I know everything in cocos2d
is rendered vis CCNode
or it's subclass. So you must put your code inside draw
method of some CCNode
or it's subclass.
OTHER TIPS
I have found another easy way to draw line in CCLayer. Cocos2d-x has a class named CCDrawNode. You can check reference here. And it is very easy to use the function:
void drawSegment(const CCPoint & from,
const CCPoint & to,
float radius,
const ccColor4F & color
)
Little example:
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));
You must use ccDrawLine
function in draw()
Example
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));
}
And remember layer must be empty because it call first draw next it will draw children so if you have children it will overlap what you draw.
Z order :)
So in your code you have class
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));
}
}
Above code will draw what you want.
auto node = DrawNode::create();
node->drawLine(Vec2(200, 200), Vec2(200, 500), Color4F(1.0, 1.0, 1.0, 1.0));
this->addChild(node);
In cocos2d-x 3.0
alpha you can use
DrawPrimitives::drawLine(const cocos2d::Point &origin, const cocos2d::Point &destination);