我想在 libgdx 中绘制一条直线虚线,用于Android游戏之间的屏幕点。
目前,我使用以下代码绘制非虚线,使用ShapeRenderer
:
shapeRenderer.begin(ShapeType.Line);
//draws normal line, would prefer it dotted...............
shapeRenderer.line(touchPos.x, touchPos.y, someSprite.getX(), someSprite().getY());
shapeRenderer.end();
我见过another question about dotted lines,但这对我来说有点矫枉过正,因为我不需要弯曲等等。我只需直线虚线,就像
............................................... ................................................
考虑过一个只计算线上点的位置并在那里画点的循环?但是真的有必要吗,有人知道更简单的方法吗?
答案 0 :(得分:8)
目前我正在使用此方法绘制虚线:
/**
* Draws a dotted line between to points (x1,y1) and (x2,y2).
* @param shapeRenderer
* @param dotDist (distance between dots)
* @param x1
* @param y1
* @param x2
* @param y2
*/
private void drawDottedLine(ShapeRenderer shapeRenderer, int dotDist, float x1, float y1, float x2, float y2) {
shapeRenderer.begin(ShapeType.Point);
Vector2 vec2 = new Vector2(x2, y2).sub(new Vector2(x1, y1));
float length = vec2.len();
for(int i = 0; i < length; i += dotDist) {
vec2.clamp(length - i, length - i);
shapeRenderer.point(x1 + vec2.x, y1 + vec2.y, 0);
}
shapeRenderer.end();
}
所以基本上我计算了绘制线的矢量并通过它循环以根据所需的点距离绘制点。在我的测试中,10的距离看起来相当不错:
drawDottedLine(shapeRenderer, 10, x1, y1, x2, y2);
这对我来说非常顺利。如果您有更好的绘制虚线的方法,请告诉我。
答案 1 :(得分:1)
您可以绘制一系列点,这些点又会形成虚线。并创建一个for循环,绘制一系列点直到结束。代码看起来像这样:
shapeRenderer.begin(ShapeType.Point);
for (float i = touchPos.x; i < someSprite.getX(); i += (someSprite.getY() / touchPos.y))
{
for (float j = touchPos.y; j < someSprite.getY(); j += (someSprite.getX() / touchPos.x))
{
// floats used because the increment might be decimal places.
shapeRenderer.point(i, j, 0);
}
}
shapeRenderer.end();
不知道这是否适合您,但您可以试一试,根据需要修改i
和j
的增量值。
总的来说,我担心在libgdx中没有用于绘制虚线的预定义函数。