2013-10-22 71 views
0

我有一個問題,從世界座標轉換點到屏幕座標。我有一張地圖,每個5px左右都有一個軌道,用來繪製軌道。地圖是2500x2000,我的畫布(手機屏幕)是800x600px。Android遊戲點繪圖

我只想畫出電話屏幕上的可見軌跡,直到汽車移動。所以我從點數組中抓取了點(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))); 
     } 
    } 

上述工作,我可以得到的軌跡應該在屏幕上顯示的點,但現在我需要將其轉換所以他們在屏幕上畫'大'。例如,如果地圖被裁剪爲2000,100,並且這裏有一點,那麼該點應該畫在0,100處。所以我需要將這些第一個座標轉換爲屏幕上的正確位置。

+0

你可以發佈你的代碼到目前爲止。 – Kerry

+0

您好我已經添加了代碼,它按預期工作。但我需要轉換這些點,因爲它們在世界範圍內不是屏幕比例,謝謝 – jonny

+0

我認爲你自己已經回答了這個問題,'比例'是最佳的單詞。 – Kerry

回答

0

這並不完全清楚你的問題是什麼。如果兩個座標系的起源重合,那麼我認爲只需要在一個系統中將適當的比例因子應用於座標就可以在另一個系統中獲得比例座標。它的每個座標系的起源不重合,那麼你也需要應用一個變換以及縮放。

而不是編程問題,我認爲這是一個數學問題。

+0

是的,我認爲你的權利。我最終得到了正確的觀點,但它們非常小,所以我需要在x和y中縮放它們,但這是我無法弄清楚的。我猜這將是X + X /寬度或類似的東西,但這是我卡住的地方? – jonny