Почему так сложно нарисовать красный прямоугольник Sprite на белом фоне Layer with cocos2d-x?

Черт! Я хочу сделать самую простую вещь в мире с помощью cocos2d-x, и у меня есть проблемы. Мне нужен белый слой с красным прямоугольником. Сначала я выяснил, для того чтобы раскрасить слой, из которого я должен извлечь 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));
}
};

Но это тоже не сработало! Как я могу сделать эту простейшую вещь? Я что-то пропустил?

1

Решение

Я нашел тесты для беты здесь:
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
}
}
1

Другие решения

Других решений пока нет …