2014-02-19 57 views
4

我想繪製一個直線虛線在libgdx之間的android遊戲之間的屏幕點。在libgdx中繪製直線的簡易方法?

目前,我有以下代碼繪製不點劃線,用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); 

這對我來說很順利。如果你有更好的方式繪製虛線,請讓我知道。

+0

請謹慎使用Math.sqrt。你可以很容易地使用Bresenham算法來做這個,而不需要太多的計算。 –

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(); 

不知道這是否會爲你工作,但你可以給它一個嘗試,爲ij你的願望編輯增量值。

總體而言,恐怕沒有在libgdx中繪製虛線的預定義函數。

+0

是的循環繪圖點也是我的第一個想法,但我正在尋找的東西,會更快,也許更容易。其實我認爲你的代碼會給出一個裏面有很多點的矩形。 – donfuxx

+0

雖然不是隨機的,但它應該是線性模式。就像我說的,沒有預定義的方法來繪製我所知道的虛線,所以我認爲一個循環是最簡單的選擇。 – Arbiter