2011-03-07 42 views
1

我正在構建一個模擬器來協助我在Uni工作的一個項目。我用兩個「球員」(實際上是樂高機器人)來動畫本質上是一場足球比賽。擺動繪製在不正確的座標上

我遇到的問題是,我用於繪製的座標似乎是錯誤的,因爲所有東西都比我想要的更靠後(在x和y)。比如畫在球場的另一邊的白線我這樣做:

double X_RATIO = this.getSize().width/244; 
double Y_RATIO = this.getSize().height/122; 

g.fillRect((int) (243 * X_RATIO), (int) (0 * Y_RATIO), (int) (1 * X_RATIO), (int) (122 * Y_RATIO)); 

你可以看到,我擴展它是由電流的大小得出這樣我就可以一直使用該球場的標準尺寸作爲我的座標系(這裏是244 x 122)。這條線從面板的右側至少繪製10個像素(然後從底部向上約5個像素)。

起初我認爲它會對鑄件做什麼,但是我把它留給最後一個可能的第二個(只有在繪製階段投射位置必須是int)。有誰知道這個問題可能是什麼?不用說,這是非常令人沮喪的,因爲我看不出我的數學有什麼問題。

回答

3

檢查您的比率X_RATIO和Y_RATIO,因爲您在右側使用了整數除法。您可以將其替換爲

double X_RATIO = this.getSize().width/244.0; 
double Y_RATIO = this.getSize().height/122.0; 

以獲得正確的縮放行爲。

+0

我的天啊,我是個白癡。非常感謝。 – seadowg 2011-03-07 21:22:08

+0

不錯的提示。此外,您可能必須在窗口和您繪製的圖形表面的相對座標系之間進行補償;切開這個畫出你的填充矩形,使它比整個表面稍微小一些,然後進行比較。 – 2011-03-07 21:23:05

1

我認爲這是由於比率初始化的方式:你做一個int分割,所以結果是一個int,而不是一個double。將其中一個值作爲double來獲得雙重結果。