cocos2d::LayerColor
和LayerColor::initWithColor(Color4B(255, 255, 255, 255))
派生的图层着色然后我了解到为了绘制一个矩形我应该覆盖这样的绘图方法:
void HelloWorld::draw()
{
DrawPrimitives::setDrawColor4F(1.0f, 0.0f, 0.0f, 1.0f);
DrawPrimitives::drawRect(Point(100,100), Point(400,400));
}
这件事分开工作,但他们不能一起工作。我想当我覆盖绘图时,所有绘图都缩减为这两个函数调用,因此我的图层的背景变为黑色。这个最简单的事情的解决方案在哪里?
编辑:
我试图在被覆盖的人中调用LayerColor::draw
,如下所示:
void HelloWorld::draw()
{
LayerColor::draw();
DrawPrimitives::setDrawColor4F(1.0f, 0.0f, 0.0f, 1.0f);
DrawPrimitives::drawRect(Point(100,100), Point(400,400));
}
没有帮助。试图从sprite和addChild派生到这样的层:
class BoardView : public Sprite
{
public:
BoardView() : Sprite()
{
}
virtual void draw() override
{
DrawPrimitives::setDrawColor4F(1.0f, 0.0f, 0.0f, 1.0f);
DrawPrimitives::drawRect(Point(100,100), Point(400,400));
}
};
但这也不起作用!我怎么能做这个最简单的事情?我错过了什么吗?
答案 0 :(得分:1)
我创建了一个简单的测试类来测试它:
#ifndef __ccxtest__DrawTest__
#define __ccxtest__DrawTest__
#include <iostream>
#include "cocos2d.h"
class DrawTestLayer : public cocos2d::Layer
{
public:
CREATE_FUNC(DrawTestLayer);
protected:
void draw();
};
#endif /* defined(__ccxtest__DrawTest__) */
实施:
#include "DrawTest.h"
USING_NS_CC;
void DrawTestLayer::draw()
{
glLineWidth(1);
DrawPrimitives::setDrawColor4B(255,255,255,255);
DrawPrimitives::setPointSize(1);
// Anti-Aliased
glEnable(GL_LINE_SMOOTH);
// filled poly
glLineWidth(1);
Point filledVertices[] = { Point(10,120), Point(50,120), Point(50,170), Point(25,200), Point(10,170) };
DrawPrimitives::drawSolidPoly(filledVertices, 5, Color4F(0.5f, 0.5f, 1, 1 ) );
}
最后在父场景/图层的init中:
auto myLayer = DrawTestLayer::create();
this->addChild(myLayer);
结果是一个5点多边形。我在一个通用的hello world项目中测试了这个,并且显示了背景图像,颜色,字体等。
编辑:如何显示/隐藏绘图:
void DrawTestLayer::draw()
{
if ( drawFlagBoolean ) // controlled by timer or scheduled action
{
// draw code here
// every frame primitives are drawn
}
}