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