2017-05-30 26 views
0

我正在使用Java製作平臺遊戲。我有一個帶有圖標的JLable形式的角色,可以使用箭頭鍵移動。我使用setBounds()方法設置JLabel的位置,但此方法僅將int值作爲x和y參數,並且我想要更精確的控制。使用空佈局,是否可以使用更精確的值,例如double來定位JLabel?是否可以使用十進制數字來定位JLabel,例如double?

謝謝您的時間,並有一個偉大的日子。

+0

想一想。你可以有一個半像素或3/4像素? (答案是不) – CodingNinja

回答

4

那麼,如果你正在使用JLabels,那麼你正在使用的Swing,和Swing具有非浮點座標系統,所以沒有你不能。

1

JavaFX可以做。但是在Swing中,座標是整數像素。

你可以繪製在存儲器中的2×2縮放(圖像的getGraphics),然後重新調整以達到0.5半INT步驟;但會模糊(內插像素)或閃爍(最佳附近匹配)。

對於變焦可伸縮矢量圖形,.vg,使用蠟染文庫是可行的。

對於文本子像素提示根據紅色,綠色和藍色子像素的佈局,在某些LED屏幕上可以在三分之一像素上定位黑色文本。

一般來說這是不值得嘗試上述的努力。除此之外,JavaFX有很好的動畫支持,CSS樣式和動畫效果。

1

正如其他人都這麼說,UI組件被設計成只與精確像素座標定位。

當你真正設置的位置你可以在double存儲位置,然後圍繞它來int。像這樣:

double velX = ..., velY = ...; 
double x = ..., y = ...; 

void example() { 
    int t = 1000/30; 
    new Timer(t, (ActionEvent e) -> { 
     x += t * velX; 
     y += t * velY; 
     label.setLocation((int) Math.round(x), 
          (int) Math.round(y)); 
    }).start(); 
} 

這樣你可以以較小的增量移動。它只是不可見。

There is a really great example of animating an image here的方式非常相似,你所描述的,你應該看看什麼。在我看來,嘗試定位組件實際上比它的價值更麻煩,特別是如果你想製作類似遊戲的東西。執行自定義繪畫更加靈活。 (教程是here。)

相關問題