【发布时间】:2014-11-08 13:16:30
【问题描述】:
出于某种原因,我在网上尝试的关于分辨率独立性的所有内容都没有按照我想要的方式进行。大多数解决方案都提出了一种获取宽度和高度然后与它们一起使用类的方法,但结果始终是截断图片(太大的图片)或左上角的图片,其高度和宽度小于屏幕。
附:游戏是全屏的,但我们尝试了窗口化,它也不起作用。
【问题讨论】:
标签: c# visual-studio-2013 xna resolution
出于某种原因,我在网上尝试的关于分辨率独立性的所有内容都没有按照我想要的方式进行。大多数解决方案都提出了一种获取宽度和高度然后与它们一起使用类的方法,但结果始终是截断图片(太大的图片)或左上角的图片,其高度和宽度小于屏幕。
附:游戏是全屏的,但我们尝试了窗口化,它也不起作用。
【问题讨论】:
标签: c# visual-studio-2013 xna resolution
这实际上是一个非常简单的修复。基本上,在某处创建一个RenderTarget 对象,然后在该对象上进行所有绘制,然后将其调整到屏幕上。
使用GraphicsDevice.SetRenderTarget(target) 更改渲染目标,然后执行所有绘图操作,然后通过将其设置为null 将其更改回后台缓冲区。 RenderTargets 实际上派生自Texture2D,因此您可以将其用作参数,例如:SpriteBatch.Draw(renderTarget, Viewport.Bounds, Color.White),这会将其拉伸以适应屏幕。
【讨论】:
Game.Draw() 方法的开头,在GraphicsDevice.Clear() 之前添加GraphicsDevice.SetRenderTarget(target)。然后进行所有正常的绘图调用,然后调用GraphicsDevice.SetRenderTarget(null)。 “目标”是RenderTarget2D 类型的对象。此时,您应该只绘制紫色背景 - 这意味着没有绘制任何内容到屏幕或后台缓冲区,而是您提供的目标!现在,您调用SpriteBatch.Draw(),并且任何重载都要求Texture2D 对象,您可以为其提供“目标”。
RenderTarget2D 是一个派生自Texture2D 的类,一旦它被绘制到,您可以使用渲染目标代替纹理。