我需要讓圖像在圓環中飛翔,我現在只能卡在一個部分。 爲了計算點數,需要使用畢達哥拉斯來計算高度(點B)。讓圖像在Java中環繞飛行
現在,當使用sqrt函數時,我無法將double轉換爲int的錯誤。 這裏是我的代碼:
package vogel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
public class vogel extends Component {
private int x;
private int r;
private int b;
BufferedImage img;
public vogel() {
try {
img = ImageIO.read(new File("F:/JAVA/workspace/School/src/vogel/vogel.png"));
} catch (IOException e) {
}
r = 6;
}
@Override
public void paint(Graphics g) {
for(int i = -r; i <= r; i++) {
x = i;
b = Math.sqrt(r^2 - x^2);
g.drawImage(img, x, b, this);
}
}
public static void main(String[] args) {
JFrame f = new JFrame("Boot");
f.setSize(1000,1000);
f.add(new vogel());
f.setVisible(true);
for (int number = 1; number <= 1500000; number++) {
f.repaint();
try {
Thread.sleep(50);
} catch (InterruptedException e) {}
}
}
}
希望你們中的一個可以幫助我
我在代碼仔細看看,它有很多問題有待解決。 1)不要吞食例外。 2)不要混用Swing和AWT。 3)在Swing中進行自定義繪畫時,重寫'paintComponent()'而不是'paint()'。 4)不要在EDT中調用'Thread.sleep()'。5)當前繪畫方法中的循環很可能無法按預期工作。 (雖然我不知道你期望它如何工作)。 6)顯示的公式將圖像從左向右直線移動。 –
此外,使用畢達哥拉斯將不會平滑地將對象移動一圈。它會在對面加速並減速。如果你希望它以固定的速度移動,你需要給它一個航向和速度,並用三角函數來計算下一個座標點。 – Bob
有一個使用@ Bob的方法[這裏]的例子(http://stackoverflow.com/questions/3256269/jtextfields-on-top-of-active-drawing-on-jpanel-threading-problems/3256941#3256941)。 – trashgod