2016-10-22 7 views
1

모양 렌더러에 폴리곤을 사용하고 있는데 문제는 사용자가 필요할 때마다 꼭지점을 추가 할 수 있어야한다는 것입니다. 기본적으로 꼭지점은 사용자가 설정하지 않습니다. 내가 한 일은 사용자가 포인트를 추가 할 때마다 arrayList에 추가합니다. 나는 shapeRendererLibgdx에서 일련의 연결된 선을 그리는 방법은 무엇입니까?

for(int i = 0; i < v.size; i++){ 
    float[] vertices = new float[v.size()] 
    vertices[i - 1] = v.get(i - 1); 
    vertices[i] = v.get(i); 
} 
sr.polygon(v); 

에 다각형 렌더링을 시도하지만 난 그냥 오류를 얻을 때

ArrayList<Float> v = new ArrayList<Float>(); 
public void ontouch(screenX, screenY){ 
     v.add(screenX); 
     v.add(screenY) 
} 

그리고는 나는이 문제가 있습니다.

나는이 일을하는 다른 방법을 알고 있다면 정말 도움이 될 것입니다. 그런데도 box2d를 사용하고 있으며 충돌이 없어도 사용자 시각에만 사용됩니다. enter image description here

답변

1

내가 개인적으로하는 방법은 LinkedListVector2 개체로 사용하는 것입니다. Vector2 개체는 두 개의 수레를 저장하므로 모든 클릭에 대해 x 좌표와 y 좌표를 가져 와서 새 Vector2 개체를 만듭니다. LinkedList에 저장하면 올바른 순서로 언제든지 점을 검색 할 수 있으므로 선을 연결할 수 있습니다.

LinkedList<Vector2> v = new LinkedList<Vector2>(); 
public void ontouch(screenX, screenY){ 
     v.add(new Vector2(screenX, screenY)); // add Vector2 into LinkedList 
} 

줄을 그리거나 포인트를 연결하는 방법은 당신에게 달려 있습니다.

또 하나의 것은 클릭 한 가장 최근의 두 점만 유지하고 나머지는 버리는 것입니다. 이것은 점 대신에 선을 저장하는 것을 의미합니다. 라인이 객체라면 다음과 같이 할 수 있습니다 :

Vector2 previousPoint; 
Vector2 currentPoint; 
ArrayList<MyLineClass> lines = new ArrayList<MyLineClass>(); 
public void ontouch(screenX, screenY){ 
     if(previousPoint == null){ 
      previousPoint = new Vector2(screenX, screenY); 
     }else{ 
      previousPoint = currentPoint; 
      currentPoint = new Vector2(screenX, screenY); 
      lines.add(new MyLineClass(currentPoint, previousPoint) 
     } 
} 

나는 이것을 커프에서 썼다.하지만 나는이 예제가 효과가 있다고 생각한다.

편집 :

좋은 점 LibGDX는 오픈 소스입니다. float 숫자 배열을 사용하려는 경우이 메서드는 단순히 x와 y 좌표를 교대로 가져옵니다. 각각의 인덱스 :

0 = X1

1 = Y1

2 = X2

3 = Y2

4 = X3

5 = Y3

그것은 이상한 방법이지만 작동한다고 생각합니다.

+0

문제는 shapeRenderer.polygon (float []);입니다. float 배열이 필요하고 Vector2가 아닙니다. 고마워요. btw –

+0

LibGDX 코드를 확인한 결과 올바른 대답이라고 생각합니다. 편집을 확인하십시오. – Eames

+0

나는 그걸 시도했지만, 얼마나 많은 포인트가 있는지 모르므로 사용자가 float 배열을 초기화 할 수 없습니다. float v = new float [?]. –

관련 문제