我是新来的。希望你能帮上忙。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