2010-09-24 79 views
2

我试图为我的游戏画一个欢迎屏幕,但只有当游戏加载时。我不希望它在游戏中每次重绘。Java - Paint,JFrame和背景

所以我这样做(其中ISSTART实例化为真):

public myClass(String name){ 
    setSize(800, 800); 
    setVisible(true); 
    setResizable(false); 
    runGame() 
} 

public void paint(Graphics g) { 
    if(nowStarting) 
     g.drawImage(WelcomeGameScreen, 0, 0, null); 
    isStart = false; 
} 

的问题是,图像会弹出一秒钟,然后消失?奇怪的是,当我忽略if语句/ isStart条件时,它会起作用。这有什么问题?

回答

1

我猜你没有复制逐字代码,并且上面的代码中有错误。如果你的代码是我认为的...

public void paint(Graphics g) { 
    if(isStart) 
     g.drawImage(WelcomeGameScreen, 0, 0, null); 
    isStart = false; 
} 

然后在开始时它会绘制你的启动画面。但是,因为您将isStart设置为false,下一次调用paint时将不再绘制图像。只要操作系统告诉屏幕它需要刷新(以及在重绘时强制刷新),就会调用绘画方法。

就可以解决这个问题的方法是,在ISSTART您的应用程序设置为false时,游戏加载完成后,然后调用重绘。

0

我猜你newStarting Boolean获取尽快面板涂上改为false

+0

是的 - 但它不应该一次输入if语句并绘制背景一次吗?然后它将退出paint()方法,并且不会返回,因为我不再调用repaint()。 (还没有,那是。) – 2010-09-24 10:17:51

0

它就会立刻消失的原因是因为由Swing的框架触发重绘。另外,您已经在重写的paint()方法内写入了欢迎屏幕的代码。

请参阅有关如何火飞溅窗口的详细说明this链接。 您还有一个在Java 1.6中的SplashScreen类1.6

+0

还有别的办法吗?一个处理JFrame而不是JWindow? – 2010-09-24 10:07:22