Cocos2d-x 3 beta:多边形未绘制正确

时间:2014-01-28 08:45:55

标签: c++ cocos2d-x

我使用DrawNode作为建议来绘制多边形,但问题是它没有正确绘制,因为我喜欢附加所需多边形形状的图像和输出错误的代码输出。 代码:

if (sprite && sprite->init())
{
        sprite->setTextureRect( Rect(0, 0, 200 ,200) );
        sprite->autorelease();        
        auto draw = DrawNode::create();

        {

        Point Block1[] = {
            Point(0,0),
            Point(30,0),
            Point(50,10),        
            Point(80,10),
            Point(100,0),    
            Point(200,0),
            Point(200,40),               
            Point(100,40), 
            Point(80,50),
            Point(50,50),
            Point(30,40),
            Point(0,40)
        };



        draw->drawPolygon(Block1,12 ,Color4F(1,222,120,1), 1, Color4F(0,0,1,1));
        } 
        sprite->addChild(draw, 10); 

 }
 else
 {
        CC_SAFE_DELETE(sprite);
 }

这是代码输出错误 The Wrong output

这是我喜欢绘制的多边形(不要介意颜色) enter image description here

2 个答案:

答案 0 :(得分:5)

我知道,从Cocos2d-iphone v3的第一个版本开始,它仍然不支持凹多边形。因此,您可能需要对多边形进行三角测量,然后绘制drawPolygon。我用库poly2tri(https://code.google.com/p/poly2tri/)和一个简单的Triangulation C ++类(http://www.flipcode.com/archives/Efficient_Polygon_Triangulation.shtml)完成了这个。如果你没有透明度,这两个工作都很好,但如果你使用透明度,一点点混叠会产生奇怪的效果,因为三角形有很小的重叠量。

我知道cocos2d-iphone将在不久的将来支持凹多边形(我可以在其中一个分支中看到它重写渲染器。)

答案 1 :(得分:2)

在cocos2d 3.4中绘制多边形的方式取决于数组中点的顺序。如果将Block1[]数组的第一个点放在桥的中心/中心,则无需修改即可。这是因为cocos2d默认使用GL_TRIANGLE_FAN标志来绘制复杂对象。

如果您想要更好的解决方案。转到cocos2d源代码中的CCDrawNode.cpp文件,并将标记GL_TRIANGLE_FAN替换为GL_TRIANGLE_STRIP

enter image description here

然后检查谷歌的点数顺序,用这个标志绘制多边形。它非常适合绘制像你这样的物体。