【问题标题】:Java - Paint, JFrame, and BackgroundsJava - 绘画、JFrame 和背景
【发布时间】:2010-09-24 09:50:37
【问题描述】:

我正在尝试为我的游戏绘制一个欢迎屏幕,但仅限于游戏加载时。我不希望它在游戏期间每次都重新绘制。

所以我这样做了(其中 isStart 被实例化为 true):

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 条件时,它会起作用。这有什么问题?

【问题讨论】:

    标签: java background jframe paint drawimage


    【解决方案1】:

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

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

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

    解决这个问题的方法是,当游戏完成加载时,在应用程序中将 isStart 设置为 false,然后调用 repaint。

    【讨论】:

      【解决方案2】:

      我猜你的 newStarting 布尔值会在面板绘制后立即更改为 false

      【讨论】:

      • 是的 - 但它不应该一次进入 if 语句并绘制一次背景吗?然后它将退出paint() 方法,并且不会返回,因为我不再调用repaint()。 (目前还没有。)
      【解决方案3】:

      它立即消失的原因是 Swing 框架触发的重绘。另外,您已经在重写的 paint() 方法中编写了欢迎屏幕的代码。

      请参阅this 链接以获取有关如何触发启动窗口的详细说明。 Java 1.6 中还有一个 SplashScreen

      【讨论】:

      • 还有别的办法吗?一个处理 JFrame 而不是 JWindow 的?
      猜你喜欢
      • 2012-06-20
      • 2012-12-18
      • 2011-05-12
      • 2012-11-08
      • 2014-09-29
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多