세계 좌표에서 화면 좌표로 포인트를 변환하는 데 문제가 있습니다. 트랙을 그리기 위해 매 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에 그려야합니다. 그래서 첫 번째 좌표를 화면의 올바른 위치로 변환해야합니다.
지금까지 코드를 게시 할 수 있습니까? – Kerry
안녕하세요, 예상대로 작동하는 코드를 추가했습니다. 그러나 나는 스크린 스케일이 아닌 세계적인 스케일을 가지고 있기 때문에 이러한 포인트를 변환해야합니다. – jonny
당신이 질문에 스스로 답한 것 같아요. '스케일'이 최적의 단어입니다. – Kerry