【问题标题】:Flickering images in java, BufferStrategy?java中闪烁的图像,BufferStrategy?
【发布时间】:2012-12-01 06:44:58
【问题描述】:

我正在用 Java 制作游戏,需要在游戏板上绘制单位。我将所有单位放在一个列表中并绘制该列表中的每个单位。绘制方法如下所示:

  public void paint(Graphics g) {
        super.paint(g);

        if (unitList != null) {
            Collections.sort(unitList);
            for (Unit unit : unitList) {
                Image image = unit.getImage();
                g.drawImage(
                        image,
                        (int) (playPosition.x + unit.getPosition().getX() - image
                                .getWidth(null) / 2), (int) (playPosition.y
                                + unit.getPosition().getY() - image
                                .getHeight(null) / 2), null);
            }
        }
    }

我试图制作一个 BufferStrategy ,但它只会让问题变得更糟,我猜我做错了什么。

谢谢

【问题讨论】:

  • 覆盖paintComponent()而不是paint()
  • 可能是Collections.sort(unitList);引起的,没人知道,准备好之前使用paintComponent
  • @user1900750 这个问题无法回答,为了更好的帮助,请尽快发布SSCCE,简短,可运行,可编译
  • 正如 mKorbel 所说,它很难回答这个问题,但是看看我的 anwser o mine 演示了 java 中的一些游戏循环/逻辑:stackoverflow.com/questions/13825515/…
  • 对于example

标签: java image swing flicker


【解决方案1】:

也许你没有正确实现BufferStrategy
通过在Image 上进行屏幕外绘画尝试手动双缓冲,然后只需在常规覆盖的paint() 方法中绘制整个所述图像。

你会这样做:

// Double buffering objects.
Image doubleBufferImage;
Graphics doubleBufferGraphics;

/*
 * Onscreen rendering.
 */
 @Override
 public void paint(Graphics g) {
     doubleBufferImage = createImage(getWidth(), getHeight());
     doubleBufferGraphics = doubleBufferImage.getGraphics();
     paintStuff(doubleBufferGraphics);
     g.drawImage(doubleBufferImage, 0, 0, this);
 }

/*
 * Offscreen rendering.
 */
 public void paintStuff(Graphics g) {
     if (unitList != null) {
        Collections.sort(unitList);
        for (Unit unit : unitList) {
            Image image = unit.getImage();
            g.drawImage(
                    image,
                    (int) (playPosition.x + unit.getPosition().getX() - image
                            .getWidth(null) / 2), (int) (playPosition.y
                            + unit.getPosition().getY() - image
                            .getHeight(null) / 2), null);
        }
    }
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-13
    • 2015-01-24
    • 2013-05-17
    • 2010-10-29
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多