在libGDX中绘制逻辑门

时间:2016-06-29 15:52:43

标签: java libgdx

我正在尝试使用libGDX为原理图设计生成器绘制纯色逻辑门。或门由于其不规则的形状而特别困难。我已经发现使用ShapeRenderer.curve函数绘制这些门非常成功,但这只能绘制未填充的线。我试图用arcs绘制,但最终结果太圆了。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我一直在使用Pixmaps(而不是ShapeRenderer)来绘制自定义形状并取得巨大成功。不幸的是,这是一个涉及的过程,但它提供了很大的灵活性,能够绘制你想要的任何形状。

如果您熟悉Photoshop中的钢笔工具(使用控制点绘制曲线),LibGDX中的BSpline类以相同的方式工作。在我的问题中,我提供了使用BSpline绘制简单曲线的示例代码。

BSpline derivativeAt() method does not return correct value

然后,一旦绘制完整的形状,就可以使用“填充填充”算法填充形状。基本上,您选择一个位于形状中心某处的点,然后算法使用递归向外填充,直到它到达形状的边缘。这是我的洪水填充代码,我从较大的类中删除了,删除了不相关的代码,并将其全部打包到一个方法中。这个孤立的代码是未经测试的,希望我在这个过程中没有破坏它...但是这应该给出了如何做的想法。

public void floodFillShape(Pixmap shapePixmap, int x, int y){
    Array<Vector2> queue = new Array<Vector2>(Vector2.class);
    Color tempColor = new Color();
    Vector2 point;
    queue.add(new Vector2(x, y));

    while (queue.size > 0){
        point = queue.pop();

        if (tempColor.set(shapePixmap.getPixel((int)point.x, (int)point.y)).a == 0){                
            shapePixmap.drawPixel((int)point.x, (int)point.y);              
            queue.add(new Vector2((int)point.x+1, (int)point.y));
            queue.add(new Vector2((int)point.x-1, (int)point.y));
            queue.add(new Vector2((int)point.x, (int)point.y+1));
            queue.add(new Vector2((int)point.x, (int)point.y-1));
        }
    }
}