【问题标题】:Scaling graphics causes game to stop rendering缩放图形导致游戏停止渲染
【发布时间】:2013-05-21 03:46:07
【问题描述】:

我正在用 Java 制作一个(目前相当简单的)自上而下的 2D 游戏,但在实现缩放时遇到了麻烦。

似乎我可以缩放的唯一方法是减小宽度和高度,并将倍增的版本提供给 setPreferredSize()。我想改用 AffineTransform 在渲染时缩放我的 Graphics2D,但包含 g2d.setTransform(transformer); 行会使所有内容都呈现为空图块。

没有: 和:

我还尝试将我的类处理平铺/精灵渲染乘以/除以宽度和高度的值,得到完全相同的结果。有什么想法吗?

这是我的渲染方法:

    bs = getBufferStrategy();
    if (bs == null) {
        createBufferStrategy(3); // woo, triple buffering!
        return;
    }

    transformer.scale(scale, scale);

    // other stuff here . . . 

    // draw screen.pixels to pixels
    for (int i = 0; i < pixels.length; i++) {
        pixels[i] = screen.pixels[i];
    }

    // draw
    g2d = (Graphics2D)bs.getDrawGraphics();
    g2d.setTransform(transformer);
    {
        g2d.drawImage(image, 0, 0, width, height, null);
        /* g.setColor(Color.WHITE);
         * g.setFont(new Font("Veranda", 0, 50));
         * g.drawString("B: " + Mouse.b(), 80, 80);
        */
    }
    g2d.dispose();

    bs.show(); // blit/show buffer

    Toolkit.getDefaultToolkit().sync();

我使用的是 Eclipse IDE,并且在 Java1.6 上没有预制游戏引擎。我正在渲染到 JFrame 中的画布上。

【问题讨论】:

  • 我记得,缩放转换也会缩放位置点
  • 有没有不这样做的标准化缩放方法?还是我需要手动检查并反击每个?
  • 别想了,不。您可以尝试使用AffineTransformation#setToTranslation 翻译图形原件
  • setToTranslation 停止它显示空白图块,但它的功能是沿翻译值(偏移所有内容)。查看 AffineTransformation api 页面以获得更合适的功能。
  • 使用 setToScale 似乎证明你对缩放位置点的看法是正确的——当我在游戏中调整缩放因子时,我可以看到一切都向右移动。

标签: java zooming transform render 2d-games


【解决方案1】:

我会参加 Slick2d http://www.slick2d.org/

它有自己的 Image 类,它处理调整图像大小的方式非常容易使用。

【讨论】:

  • 此时我不太热衷于迁移到现有引擎。当然,我的游戏还远未完成,但我的引擎与其余部分混在一起有点太难了。
  • 经过反思,我认为无论如何我都必须进行大量重写,所以我可能会使用 slick。不幸的是,该网站已关闭。我还能从哪里获得好的资源?
  • here 是一个已设置并可以使用的示例。这已经包括您需要的库。不过,您将不得不更改本机库位置,以满足您的路径才能使其正常工作。右键单击您的项目文件夹,“构建路径->配置构建路径”然后转到库选项卡,并下拉 lwjgl.jar 上的箭头,并将本机库位置设置为您的操作系统文件夹。跨度>
  • 另外,从长远来看,拥有一个非常混乱的引擎会让你感到沮丧。 Slick 负责细节,因此您可以真正开始制作游戏。此外,所有这些都假设您使用的是 eclipse。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
  • 2017-12-09
  • 2015-03-28
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
相关资源
最近更新 更多