1

该死的!我想通过 cocos2d-x 做世界上最简单的事情,但我遇到了问题。我需要一个红色矩形上的白色层。首先,我发现为了给我必须从中派生的图层着色cocos2d::LayerColorLayerColor::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));
    }
};

但这也没有用!我怎么能做这个最简单的事情?我错过了什么?

4

1 回答 1

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
    }
}
于 2014-02-20T23:31:05.907 回答