该死的!我想通过cocos2d-x做世界上最简单的事情,但是我遇到了问题。我需要在一个红色矩形上放置一个白色图层。首先,我找到以便为必须从中派生的图层着色cocos2d::LayerColor
,LayerColor::initWithColor(Color4B(255, 255, 255, 255))
然后我了解到要绘制矩形,我应该重写这样的draw方法:
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));
}
};
但这也不起作用!我该怎么做最简单的事情?我错过了什么?
我在这里找到了测试版的测试:http : //www.cocos2d-x.org/reference/native-cpp/V3.0alpha0/d1/d89/namespacecocos2d_1_1_draw_primitives.html#a196155c1b3410485d0b77379acf22e64
我创建了一个简单的测试类来对其进行测试:
#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 ) );
}
最后在父场景/图层的初始化中:
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
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句