【问题标题】:Scaling a game with hard coded coordinates to fit any screen?使用硬编码坐标缩放游戏以适应任何屏幕?
【发布时间】:2013-01-03 21:32:11
【问题描述】:

我已经在一个非常基本的 Java 游戏上工作了大约一个月,但我遇到了一个大问题。它可以在任何显示器上正常工作,只要该显示器的分辨率高于 1280 x 720,这是我设置游戏运行时的分辨率。直到我在我朋友的电脑上运行它并且它并不完全适合他的屏幕时,我才意识到这是一个问题。这里真正的问题是,我正在制作一种 2D 自上而下的射击游戏,每个关卡中的墙壁和道具都有硬编码的坐标。我无法将所有内容都与屏幕尺寸相关,因为这不仅会非常困难,而且还会使游戏的难度甚至可能随着屏幕分辨率而变化。我想一种解决方案是让它以 800 x 600 的分辨率运行,并让所有的关卡都变小,但这并没有我想要的空间那么大。

我想知道是否有办法让我扩展我的程序以适应显示器。例如,如果我在 4:3 显示器上运行,例如我朋友的 1024x768,我希望程序按比例适合屏幕,(因此它的顶部和底部会有黑条,就像宽屏视频一样4:3 显示器),但我也希望我的所有墙壁和电源都放置在相对于新缩放的屏幕应位于的位置。

是否有某种方法可以在程序中“拉伸”或“缩小”像素,从而使窗口中的所有内容都显示出来并按比例缩放?即使不是字面意思。感谢您的帮助。

【问题讨论】:

  • 您如何创建显示的图像?二维绘图? GIF 文件?它是 Java 中的东西,还是您以某种方式访问​​较低级别的原语或某个库?

标签: java scale resolution scaling pixels


【解决方案1】:

假设您使用标准 Graphics/Graphics2D,您可以缩放绘画:

private static final double SCALE = 0.75;
private static final double INV_SCALE = 1.0 / SCALE;

@Override
public void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D)g;
    g2.scale(SCALE, SCALE);
    ...
    g2.scale(INV_SCALE, INV_SCALE);

}

比例因子(这里是 SCALE)当然更难设置。

鼠标坐标必须自己缩放。

【讨论】:

  • 这个相关的answer比较了鼠标缩放的两种方法。
  • 这很好用!谢谢你。如果您只是将它们乘以反比例,鼠标坐标似乎可以工作。我以为我在问一个愚蠢的问题,但我很高兴我做到了。
【解决方案2】:

在代码中使用逻辑分辨率并在输出时对其进行缩放。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多