2013-10-22 2 views
0

세계 좌표에서 화면 좌표로 포인트를 변환하는 데 문제가 있습니다. 트랙을 그리기 위해 매 5px 정도의 포인트로 구성된 트랙이있는지도가 있습니다. 지도는 2500x2000이고 내 캔버스 (전화 화면)는 800x600 픽셀입니다.안드로이드 게임 점수 도면

자동차가 움직일 때까지 휴대 전화 화면에 보이는 트랙 만 표시하고 싶습니다. 그래서 나는 (point.x> mapx)와 (point.x < mapx + screenWidth) 내 Y 포인트 배열에서 포인트를 잡았다. 그래서 이것은 스크린에 있던 트랙의 모든 현재 포인트를 잡았다.

이제 다시 화면 좌표로 변환해야하는데 여기가 멈추었습니다. 예를 들어지도의 오른쪽에있는 점은 2200x1000 일 수 있지만 화면이 800x600 인만큼 여기서 그릴 수는 없습니다.

변환 도움말이 있습니까?() 메소드의 onDraw에서 호출

감사

코드 :

// loop track array 
    Point point; 
    for (int i = 0; i < this.trackPoints.size(); i++) { 
     point = this.trackPoints.get(i); 
     // if that piece of track is on the screen currently then add to 
     // array 
     if ((point.x > mapx) && (point.x < mapx + this.getWidth()) 
       && (point.y > mapy) && (point.y < mapy + this.getHeight())) { 

      //translate point back to screen-coords 
      Log.v("visibletrack", "adding point x = " + point.x + " point y = " + point.y); 
      Log.v("visibledebugging", "mapmaxx = " + this.mapMaxX + " mapmaxy = " + this.mapMaxY); 
      Log.v("visibledebugging", "scale x = " + scaleX + " scaley = " + scaleY); 
      this.visibleTrackPoints.add(new Point((int)(point.x/scaleX), (int)(point.y/scaleY))); 
     } 
    } 

I가 화면에 표시되어야 트랙의 포인트를 얻을 수 있지만 지금은 너무 변환 할 필요가 위의 작품

그들은 화면에서 '크게'그립니다. 예를 들어지도가 2000,100에 잘려서 여기에 한 점이 있다면 그 점은 화면의 0,100에 그려야합니다. 그래서 첫 번째 좌표를 화면의 올바른 위치로 변환해야합니다.

+0

지금까지 코드를 게시 할 수 있습니까? – Kerry

+0

안녕하세요, 예상대로 작동하는 코드를 추가했습니다. 그러나 나는 스크린 스케일이 아닌 세계적인 스케일을 가지고 있기 때문에 이러한 포인트를 변환해야합니다. – jonny

+0

당신이 질문에 스스로 답한 것 같아요. '스케일'이 최적의 단어입니다. – Kerry

답변

0

문제가 무엇인지 완전히 분명하지 않습니다. 두 좌표계의 출처가 일치하면, 하나의 시스템의 좌표에 적절한 비율 조정 계수를 적용하여 다른 좌표계의 좌표에 도달하는 것이 문제라고 생각합니다. 각 좌표계의 기원이 일치하지 않으면 변형뿐만 아니라 크기 조정도 적용해야합니다.

프로그래밍 문제가 아니라 수학적 문제라고 생각합니다.

+0

네, 그럴 권리가 있다고 생각합니다. 나는 올바른 포인트로 끝나지 만 아주 작아서 x와 y로 스케일링 할 필요가있다. 그러나 이것은 내가 알 수없는 것이다. 짐작할 때 x + x/width 또는 이와 비슷한 것이 겠지만 이것이 내가 붙어있는 곳입니까? – jonny