我目前正在使用 XNA 4 开发一款老式游戏。我的图形资产基于 568x320 分辨率(16/9 比例),我想更改我的窗口分辨率(例如 1136x640)并且我的图形在不拉伸的情况下进行缩放,即他们保持像素方面。
我怎样才能做到这一点?
哦,天哪 !!!!我懂了 !只需在 spriteBatch.Begin 方法中提供 SamplerState.PointClamp 即可保持酷炫的像素视觉效果 <3
spriteBatch.Begin(SpriteSortMode.Immediate,
BlendState.AlphaBlend,
SamplerState.PointClamp,
null,
null,
null,
cam.getTransformation(this.GraphicsDevice));
您可以使用 aRenderTarget
来实现您的目标。听起来您不想根据每个可能的屏幕尺寸进行相应的渲染,因此,如果您的图形不依赖于鼠标等其他图形功能,那么我将使用 aRenderTarget
并将所有像素数据绘制到该尺寸,然后再绘制将其绘制到实际屏幕上,允许屏幕拉伸它。
这种技术也可以用在其他方面。我使用它在我的游戏中绘制对象,因此我可以轻松更改旋转和位置,而无需计算对象的每个精灵。
例子:
void PreDraw()
// You need your graphics device to render to
GraphicsDevice graphicsDevice = Settings.GlobalGraphicsDevice;
// You need a spritebatch to begin/end a draw call
SpriteBatch spriteBatch = Settings.GlobalSpriteBatch;
// Tell the graphics device where to draw too
graphicsDevice.SetRenderTarget(renderTarget);
// Clear the buffer with transparent so the image is transparent
graphicsDevice.Clear(Color.Transparent);
spriteBatch.Begin();
flameAnimation.Draw(spriteBatch);
spriteBatch.Draw(gunTextureToDraw, new Vector2(100, 0), Color.White);
if (!base.CurrentPowerUpLevel.Equals(PowerUpLevels.None)) {
powerUpAnimation.Draw(spriteBatch);
}
// DRAWS THE IMAGE TO THE RENDERTARGET
spriteBatch.Draw(shipSpriteSheet, new Rectangle(105,0, (int)Size.X, (int)Size.Y), shipRectangleToDraw, Color.White);
spriteBatch.End();
// Let the graphics device know you are done and return to drawing according to its dimensions
graphicsDevice.SetRenderTarget(null);
// utilize your render target
finishedShip = renderTarget;
}
请记住,在您的情况下,您将RenderTarget
使用 568x320 的尺寸进行初始化并根据该尺寸进行绘制,而不必担心任何其他可能的尺寸。一旦你给RenderTarget
spritebatch 绘制到屏幕上,它会为你“拉伸”图像!
编辑:
对不起,我浏览了这个问题并错过了你不想“拉伸”你的结果。这可以通过RenderTarget
根据图形设备将最终绘制到您指定的尺寸来实现。