【问题标题】:Pygame, change resolution of my whole gamePygame,改变我整个游戏的分辨率
【发布时间】:2016-02-11 08:09:00
【问题描述】:

我已将整个 pygame 设计为可在 1920x1080 分辨率下工作。

但是,我必须调整它以适应更小的分辨率。

代码中有很多硬编码的值。

有没有一种简单的方法来改变分辨率,比如在每个循环结束时调整最终图像的大小,就在绘制它之前?

【问题讨论】:

  • 您可以调整最终图像的大小,但这会扼杀分辨率较小的性能节省点。您应该改进您的代码以适用于任何分辨率。
  • 你能解释一下我可以调整最终图像的大小吗?我的游戏在性能上并不太饿,所以这应该不是问题
  • 这里有同样的问题吗? stackoverflow.com/a/18950357/902399

标签: python pygame resolution


【解决方案1】:

您可以使用:pygame.transform.scale 或更好(但效率较低)pygame.transform.smoothscale

为此,只需将您绘制(屏幕)的参考表面更改为通用表面。之后,只需调整它的大小,并将其放在屏幕上。

如果你不明白它是如何工作的,我可以给你看一些代码。随便问问。

【讨论】:

  • 你不应该缩放每一帧。
  • 问题是:有没有一种简单的方法来改变分辨率,比如在每个循环结束时调整最终图像的大小,就在绘制它之前?这是我希望的正确答案。好吧,这是一个性能杀手,但是,它完成了这项工作。如果他的所有作品都引用了他的原生分辨率,那么这是处理所有代码而不修改所有代码的最小代码
  • 是的,当然这是他的问题,但总是让他知道这是一个糟糕的解决方案(性能杀手)并且有更好的方法。
  • 我再次不同意你的看法。当你编码时,你应该做出选择:快速编码、快速执行、快速测试……每个选择都是个人的。问题是:“代码中有很多硬编码值。”。这真是太糟了。纠正一个这样的问题并非易事,纠正这个问题解决了他的第一个问题。所以,问题(什么是理解)不是“如何纠正我糟糕的编码”,而是“我怎样才能以最小的努力完成工作”。我更喜欢回答原来的问题,在这种情况下我的回答是有效的。关于性能的警告之前已在评论中完成,为什么要担心?
【解决方案2】:

我通常会创建一个base resolution,然后每当调整屏幕大小时,我都会按比例缩放所有资产和表面。

如果您拥有高分辨率的资产并且您已按比例缩小但会为较小的图像像素化,则此方法效果很好。

您还可以为每个分辨率创建多个资产文件,当您的分辨率超过可用资产分辨率之一时,您可以更改图像。您可以在css media query 的上下文中思考以更好地理解。

【讨论】:

  • 这应该是答案,当屏幕尺寸发生变化时,您应该只缩放所有资产一次,而不是每帧缩放整个屏幕。
  • 是的,这可以通过调用 resize 作为 VIDEORESIZE 事件类型的事件回调来实现。
猜你喜欢
  • 2014-01-24
  • 1970-01-01
  • 2013-09-09
  • 2014-05-08
  • 1970-01-01
  • 2012-11-20
  • 1970-01-01
  • 1970-01-01
  • 2017-02-16
相关资源
最近更新 更多