我正在使用Java製作平臺遊戲。我有一個帶有圖標的JLable形式的角色,可以使用箭頭鍵移動。我使用setBounds()方法設置JLabel的位置,但此方法僅將int值作爲x和y參數,並且我想要更精確的控制。使用空佈局,是否可以使用更精確的值,例如double來定位JLabel?是否可以使用十進制數字來定位JLabel,例如double?
謝謝您的時間,並有一個偉大的日子。
我正在使用Java製作平臺遊戲。我有一個帶有圖標的JLable形式的角色,可以使用箭頭鍵移動。我使用setBounds()方法設置JLabel的位置,但此方法僅將int值作爲x和y參數,並且我想要更精確的控制。使用空佈局,是否可以使用更精確的值,例如double來定位JLabel?是否可以使用十進制數字來定位JLabel,例如double?
謝謝您的時間,並有一個偉大的日子。
那麼,如果你正在使用JLabels
,那麼你正在使用的Swing,和Swing具有非浮點座標系統,所以沒有你不能。
Looking at the JavaDocs for JLabel
...
setLocation
需要ints
作爲參數。似乎沒有辦法使用小數座標。
JavaFX可以做。但是在Swing中,座標是整數像素。
你可以繪製在存儲器中的2×2縮放(圖像的getGraphics),然後重新調整以達到0.5半INT步驟;但會模糊(內插像素)或閃爍(最佳附近匹配)。
對於變焦可伸縮矢量圖形,.vg,使用蠟染文庫是可行的。
對於文本子像素提示根據紅色,綠色和藍色子像素的佈局,在某些LED屏幕上可以在三分之一像素上定位黑色文本。
一般來說這是不值得嘗試上述的努力。除此之外,JavaFX有很好的動畫支持,CSS樣式和動畫效果。
正如其他人都這麼說,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。)
想一想。你可以有一個半像素或3/4像素? (答案是不) – CodingNinja