2015-12-29 61 views
2

我正在SDL中进行游戏,并对分辨率进行了监督。一切(精灵)都太大了,我想知道是否可以提高分辨率,因此一切都较小,而无需更改每个精灵或修改如何创建曲面?以下是我处理的:如何更改SDL中窗口的分辨率?一切都太大

my game (png)

+0

在纯SDL2,你将不得不精灵与像SDL2_gfx外部库减少。也许现在是时候让你学习OpenGL,它可以在没有像SDL那样的性能损失的情况下进行这些操作。 –

+0

谢谢!在我的游戏中,我预先加载了主循环之前的所有精灵,所以最小化它们不应该影响性能......任何进一步......;) – Dane

+0

对于游戏开发网站可能是一个更好的问题。 – CDuck

回答

0

由于SDL 2.0.0,您可以使用函数SDL_RenderSetLogicalSizeto set a device independent resolution for rendering

这种方式,你可以设置你的渲染与期望的目标分辨率和借鉴一切,如果你是该决议的工作。

我举官方documentation

这是在好的时候,您可以更改逻辑呈现大小,以达到不同的效果,但主要用途是这样的:而不是试图使该系统的工作与你的渲染大小,我们现在可以使您的渲染大小与系统一起工作。在我的1920x1200显示器上,该应用程序认为它现在正在与640x480分辨率对话,但SDL正在使用GPU将其缩放以使用所有像素。请注意,640x480和1920x1200的纵横比不尽相同:SDL也会尽可能地缩放比例,并将其差异化。

请注意,您可以控制缩放是如何发生的与bunch of hints,作为一个例子SDL_HINT_RENDER_SCALE_QUALITY

+0

尽管如此,'SDL_RenderSetLogicalSize()'单独缩放每个绘图(而不是使用渲染目标)。这可能会导致屏幕上出现瑕疵,特别是当您不绘制整个纹理时(例如,使用精灵表)。 有关于使用渲染目标而不是单独缩放每个绘图的讨论。 AFAIK这还没有实现,它依赖于api/hw/platform /等提供的渲染到纹理功能。 –

+0

有趣。我正在研究小游戏,通常我没有精灵表,所以老实说,我从来没有见过你说的那些文物。无论如何,如果您可以提供几个链接,我很乐意将回复与更多细节进行整合。谢谢。 – skypjack

+0

[This](http://forums.libsdl.org/viewtopic.php?t=10411&postdays=0&postorder=asc&start=15)是讨论这个问题的线索之一。可悲的是代码不在那里了,提到的问题是我(mr_tawan在该板),所以它很难成为一个参考。在Sam(SDL dev)的下面提到,他已经承认这个问题,并且会考虑解决这个问题。 –

0

是的,你可以把分辨率提高一点。如果您使用全屏模式,这会使您的精灵显得更小,就像调整显示器分辨率一样。当你处于窗口模式时,窗口会变大,但精灵看起来是一样的。

你可以求助于虚拟分辨率@skypjack所提及。一种方法是使用SDL_RenderSetLogicalSize(),另一种是做渲染目标。

也可以调整子画面,无论是联机(指定目标RECT是小于源),或离线(使用类似的ACDSee或Photoshop批量图像处理工具)。

到底你有更多的空间来填补。

我的建议是,当你与图形工作,尝试铭记的目标分辨率,例如1280×720 800×600或。然后围绕此分辨率设计所有资产。最后,您将拥有合适的资产,而无需借助编程技巧。那么如果你遇到不同分辨率的设备,你可以使用上面提到的'虚拟分辨率'来修复它。还有一些技巧,比如安全框架或者信箱也是需要的,但是让我们把它作为一个提前的问题:-)。