我目前正在使用XNA 4开发一款老式游戏。 我的图形资源基于568x320分辨率(16/9比例),我想改变我的窗口分辨率(例如1136x640),我的图形缩放而不拉伸,它们保持像素方面。
我怎样才能达到这个目标?
答案 0 :(得分:1)
您可以使用RenderTarget
来实现目标。听起来你不想相应地渲染每个可能的屏幕尺寸,所以如果你的图形不依赖于其他图形功能,如鼠标,那么我会使用RenderTarget
并绘制所有像素数据然后将其绘制到实际屏幕,允许屏幕拉伸它。
这种技术也可以用于其他方式。我用它在我的游戏中绘制对象,所以我可以轻松地改变旋转和位置,而不必计算对象的每个精灵。
示例:
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;
}
请记住,在您的情况下,您会初始化尺寸为568x320的RenderTarget
并根据此绘制而不用担心任何其他可能的尺寸。将RenderTarget
提供给spritebatch以绘制到屏幕后,它将为您“拉伸”图像!
编辑:
对不起,我浏览了这个问题并错过了你不想“拉伸”你的结果。这可以通过根据图形设备将最终RenderTarget
绘制到指定的尺寸来实现。
答案 1 :(得分:1)
spriteBatch.Begin(SpriteSortMode.Immediate,
BlendState.AlphaBlend,
SamplerState.PointClamp,
null,
null,
null,
cam.getTransformation(this.GraphicsDevice));