在xna游戏中保持不同分辨率的像素方面

时间:2013-01-08 08:57:32

标签: xna pixel

我目前正在使用XNA 4开发一款老式游戏。 我的图形资源基于568x320分辨率(16/9比例),我想改变我的窗口分辨率(例如1136x640),我的图形缩放而不拉伸,它们保持像素方面。

我怎样才能达到这个目标?

2 个答案:

答案 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方法中给出SamplerState.PointClamp来保持那个很酷的像素visuel effet< 3

spriteBatch.Begin(SpriteSortMode.Immediate,
                    BlendState.AlphaBlend, 
                    SamplerState.PointClamp,
                    null,
                    null,
                    null,
                    cam.getTransformation(this.GraphicsDevice));