首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在使用过多重绘时防止延迟

如何在使用过多重绘时防止延迟
EN

Stack Overflow用户
提问于 2019-03-20 03:31:02
回答 1查看 37关注 0票数 0

我正在试着做一个小游戏,当我点击向下的箭头时,一架飞机就会掉下一颗炸弹。如果炸弹击中目标,它会改变位置,等等。

代码语言:javascript
复制
public void paint(Graphics p) {
    p.setColor(c);
    p.drawLine(0, 650, 1000, 650);

    p.fillRect(x3, y3, 150, 50);
    p.fillOval(x2, y2, 30, 30);
    p.drawImage(image, x, y, null);

    if (x < 1000) {
        x = x + 10;
    }

    if (x > 750) {
        x = 0;
    }

    try {
        Thread.sleep(40);
    } catch (InterruptedException ignored) {
    }

    if (bo==true) {
        x2 = x2 + z;
        y2 = y2 + 8;
    }

    if (y2 > 450 && z != 0) {
        z--;
    }

    if (y2 > 620) {
        x2 =- 100;
        y2 =- 100;
    }

    if (y2 > 610 && x2 < x3 + 150 && x2 > x3) {
        x3 = x3 + 100;
    }

    repaint(1);
}

但问题是,一开始一切都是正常的,1或2秒fps就像10秒,有时我看不到物体,我看到了另一个关于使用计时器的话题,但我不想用计时器来解决这个问题,甚至我都不知道我是否可以。我想知道是关于我的电脑还是ide。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-20 03:40:45

首先,不要Override paint()方法。Override paintComponent(Graphics g)方法(并且不要忘记调用super.paintComponent(g)

其次,在EDT中使用Thread.sleep()方法(希望使用SwingUtilities#invokeLater启动应用程序)不是一个好主意,因为所有事件都会停止发生(用很少的话,整个图形用户界面就会冻结)。

您应该改为使用use a swing Timer

最后,不要在paintComponent中调用repaint(),因为repaint()将再次调用paintComponent,这将是一个无休止的循环。您应该在Timer`s的操作侦听器中重新绘制组件。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55248726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档