Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在libgdx中绘制直线虚线的简单方法?_Java_Android_Drawing_Libgdx_Draw - Fatal编程技术网

Java 在libgdx中绘制直线虚线的简单方法?

Java 在libgdx中绘制直线虚线的简单方法?,java,android,drawing,libgdx,draw,Java,Android,Drawing,Libgdx,Draw,我想在libgdx中为android游戏在到屏幕点之间画一条直线 目前,我使用shaperender绘制非虚线的代码如下: shapeRenderer.begin(ShapeType.Line); //draws normal line, would prefer it dotted............... shapeRenderer.line(touchPos.x, touchPos.y, someSprite.getX(), someSprite().getY()); shapeRen

我想在libgdx中为android游戏在到屏幕点之间画一条直线

目前,我使用
shaperender
绘制非虚线的代码如下:

shapeRenderer.begin(ShapeType.Line);
//draws normal line, would prefer it dotted...............
shapeRenderer.line(touchPos.x, touchPos.y, someSprite.getX(), someSprite().getY());
shapeRenderer.end();
我看到了,但这对我来说有点过分了,因为我不需要曲线等。我只需要一条直线,就像


我想做一个循环,只计算线上点的位置,然后在那里画点?但这真的有必要吗,有人知道一种更简单的方法吗?

你可以画一系列点,然后再画一条虚线。并创建一个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();
shapenderer.begin(ShapeType.Point);
对于(float i=touchPos.x;i
不知道这是否适合您,但您可以尝试一下,根据您的需要编辑
i
j
的增量值


总的来说,恐怕在libgdx中没有用于绘制虚线的预定义函数

目前我正在使用此方法绘制点线:

/**
 * 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();
}

这对我来说相当顺利。如果您有更好的绘制虚线的方法,请告诉我。

创建一组线段,或者更好的方法,以编程方式处理所有虚线。据我所知,没有一种模式可以将其设置为虚线模式。在循环中绘制点也是我的第一个想法,但我正在寻找更快、更容易的方法。事实上,我认为你的代码会给出一种内部有很多点的矩形。虽然不是随机稀疏的,它应该是线性模式。正如我所说,我知道没有绘制虚线的预定义方法,所以我认为循环是最简单的选择。你可以很容易地使用Bresenham算法来实现这一点,而无需进行大量计算。另外,在渲染循环中实例化temp Vector2时也要小心。这可能会导致明显的垃圾收集口吃。
 drawDottedLine(shapeRenderer, 10, x1, y1, x2, y2);