Modify the ShapeRenderer.java class by replacing the polygon () method with the following code:
public void polygon(float[] vertices, int offset, int count) { if (currType != ShapeType.Filled && currType != ShapeType.Line) throw new GdxRuntimeException( "Must call begin(ShapeType.Filled) or begin(ShapeType.Line)"); if (count < 6) throw new IllegalArgumentException( "Polygons must contain at least 3 points."); if (count % 2 != 0) throw new IllegalArgumentException( "Polygons must have an even number of vertices."); checkDirty(); checkFlush(count); final float firstX = vertices[0]; final float firstY = vertices[1]; if (currType == ShapeType.Line) { for (int i = offset, n = offset + count; i < n; i += 2) { final float x1 = vertices[i]; final float y1 = vertices[i + 1]; final float x2; final float y2; if (i + 2 >= count) { x2 = firstX; y2 = firstY; } else { x2 = vertices[i + 2]; y2 = vertices[i + 3]; } renderer.color(color); renderer.vertex(x1, y1, 0); renderer.color(color); renderer.vertex(x2, y2, 0); } } else { for (int i = offset, n = offset + count; i < n; i += 4) { final float x1 = vertices[i]; final float y1 = vertices[i + 1]; if (i + 2 >= count) { break; } final float x2 = vertices[i + 2]; final float y2 = vertices[i + 3]; final float x3; final float y3; if (i + 4 >= count) { x3 = firstX; y3 = firstY; } else { x3 = vertices[i + 4]; y3 = vertices[i + 5]; } renderer.color(color); renderer.vertex(x1, y1, 0); renderer.color(color); renderer.vertex(x2, y2, 0); renderer.color(color); renderer.vertex(x3, y3, 0); } } }
Using:
gdx_shape_renderer.begin(ShapeType.Filled); gdx_shape_renderer.setColor(fill_r, fill_g, fill_b, fill_a); gdx_shape_renderer.polygon(vertices); gdx_shape_renderer.end(); gdx_shape_renderer.begin(ShapeType.Line); gdx_shape_renderer.setColor(border_r, border_g, border_b, border_a); gdx_shape_renderer.polygon(vertices); gdx_shape_renderer.end();
J fixby
source share