我是新來的。希望你能幫上忙。Java遊戲開發:圖形
問題: 在JFrame上顯示動畫的問題。似乎我想念/不夠了解Java的圖形如何工作。
全球想法: 可以說我想做一個遊戲/電影/剪輯。爲此,我需要這個(而不是)簡單的動畫起作用。
對於這個問題的一個例子: 我有類屏幕,該屏幕具有JFrame的屏幕stuff-宣言,設置它的配置(大小,關閉操作等),然後創建類框的對象,將被顯示在框架上。請檢查類的這種圖像/圖(希望我寫的正確方法):ClassesDiagram
現在,類箱擴展JPanel。我從JPanel繼承Paint()方法並覆蓋它,繪製框。
在屏幕類,我創建了兩個箱子後,我。新增它們()到JFrame。接下來,while(true)開始一個循環,並且通過使線程睡眠該數量來每隔200毫秒更新框的位置。 (在這種情況下,只是簡單的X ++或y ++取決於哪個箱,盒1或BOX2)。
主要問題1):程序運行,並且示出了的JFrame,但在它的JFrame顯示僅最後添加的對象/組分 - 框。它不顯示另一個。爲什麼?
我發現一個話題,How to add multiple components to a JFrame?,並嘗試了投票最多的提示,由jjnguy 11月15 '10在17:02。 對於一些奇怪的原因,不是第一次,也不是第二尖爲我工作。
主要問題2):據我所知,我需要佈局管理器。爲什麼我需要它,如果我只想在框架上的特定X,Y處繪製()?
找到其他職位(不能再次找到它)+ Oracle的約佈局的指導方針,建議我需要考慮使用的setLayout(NULL);我試圖這樣做,但之後再次出現問題。
主要問題3): JFrame中顯示出來,它只顯示1盒(綠色的不會顯示出來,不管你會做不知道爲什麼),並且當它MOVE-它會從刪除另一邊。 Here:Box Movement
在此先感謝您的幫助,提示和解釋!希望這篇文章清晰,有條理,看起來不錯。
public class Screen {
public static void main(String[] args) {
new Screen();
}
private JFrame window;
public Screen() {
window = new JFrame("Multiply components panel");
//window.setLayout(null);
window.setSize(200, 200);
window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Box b1 = new Box(10,10, "box1");
//b1.setBounds(10, 10, 50, 50);
Box b2 = new Box(100,100, "box2");
//b2.setBounds(100, 100, 50, 50);
window.add(b1);
//window.add(b2);
window.setVisible(true);
while (true){
b1.update();
b2.update();
try {
Thread.sleep(200);
} catch (Exception e) {
// TODO: handle exception
}
}
}
}
public class Box extends JPanel{
int x, y, w, h;
private String name;
public Box(int x, int y, String name) {
this.x = x;
this.y = y;
this.w = 100;
this.h = 100;
this.name=name;
}
public void paint(Graphics g){
System.out.println(this.name.equalsIgnoreCase("box1"));
if(this.name.equalsIgnoreCase("box1")){
g.setColor(Color.BLACK);
g.fillRect(x, y, w, h);
}else{
g.setColor(Color.GREEN);
g.fillRect(x, y, w, h);
}
}
public void update() {
if(this.name.equalsIgnoreCase("box1"))
x++;
else
y++;
//this.setBounds(x, y, w, h);
System.out.println("Current "+name+": X: "+x+", Y: "+y+", W: "+w+", H: "+h);
repaint();
}
}
有1歲孩子可以喂,但是,看看[併發中的Swing](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/),然後搜索只是因爲搖擺和動畫 – MadProgrammer
@DavidKroukamp感謝您的有用鏈接。我會檢查一下,看看你是如何在那裏做的。不過,我想明白我缺少的東西。僅製作2個對象的動畫不應該太複雜。我想了解它背後的想法。 – Daniel
@MadProgrammer你將不得不忍受它,爸爸。感謝您的鏈接,將檢查出來。不知道它將通過多少有用。似乎它深深的線程工作,我不知道我需要。至少現在。 – Daniel