为什么在白色背景上绘制红色矩形精灵如此难以用cocos2d-x?

时间:2014-02-16 07:43:15

标签: c++ cocos2d-x cocos2d-x-3.0

该死的!我想通过cocos2d-x在世界上做最简单的事情而且我有问题。我需要一个红色矩形的白色图层。首先我发现了为了给我必须从cocos2d::LayerColorLayerColor::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 个答案:

答案 0 :(得分: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 ) );
}

最后在父场景/图层的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
    }
}