在xna游戏中保持不同分辨率的像素外观

在xna游戏中保持不同分辨率的像素外观,xna,pixel,Xna,Pixel,我目前正在用XNA4开发一款老式游戏。 我的图形资源基于568x320分辨率(16/9比例),我想更改窗口分辨率(例如1136x640),并且我的图形在不拉伸的情况下进行缩放,以保持像素方向 如何实现此目标?您可以使用渲染目标来实现您的目标。听起来您不想根据每个可能的屏幕大小进行相应的渲染,因此,如果您的图形不依赖于鼠标等其他图形功能,那么我将使用RenderTarget并将所有像素数据绘制到该屏幕上,然后将其绘制到实际屏幕上,从而允许屏幕进行拉伸 这项技术也可以用在其他方面。我在游戏中使用它来

我目前正在用XNA4开发一款老式游戏。 我的图形资源基于568x320分辨率(16/9比例),我想更改窗口分辨率(例如1136x640),并且我的图形在不拉伸的情况下进行缩放,以保持像素方向


如何实现此目标?

您可以使用
渲染目标来实现您的目标。听起来您不想根据每个可能的屏幕大小进行相应的渲染,因此,如果您的图形不依赖于鼠标等其他图形功能,那么我将使用
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的尺寸初始化
渲染目标
,并根据该尺寸进行绘制,而不必担心任何其他可能的尺寸。一旦您将
渲染目标
交给spritebatch绘制到屏幕上,它将为您“拉伸”图像

编辑:


对不起,我略读了一下问题,没有提到你不想“拉伸”你的结果。这可以通过根据图形设备将最终渲染目标绘制到指定的尺寸来实现

哦,天哪!!!!我明白了!只需在spriteBatch上使用SamplerState.PointClamp。开始使用方法来保持冷静的像素视觉效果。你可以将图像绘制到纹理上,然后,将该纹理绘制到屏幕上,纹理将相应缩放。这取决于游戏的类型。也许你有一个可以平铺的背景。如果没有,那么在更改纵横比时,您可能不得不使用黑条。但是,只有当您的资产具有足够的分辨率时,更改分辨率才有意义。预渲染方法类似。它甚至可能会恶化图形质量。我的坏,我错过了解释我的问题。让我们再试一次:所有图形都是像素艺术(分辨率为568x320,没关系,可能是另一个)。但该分辨率太小,无法播放,因此玩家可以将分辨率切换为“缩放”分辨率。如果我使用矩阵变换或渲染目标,我的图形会模糊;在2倍缩放(换句话说,1136x640)的情况下,所有资源的像素都会在每个斧头上进行第二次复制,以保留像素的艺术特性(看看hydorah以更好地理解(免费软件))。嗯,真的,我当时看到的唯一实用解决方案是使用更大的精灵…无论如何,我不知道什么是renderTarget,所以我现在知道了。谢谢
spriteBatch.Begin(SpriteSortMode.Immediate,
                    BlendState.AlphaBlend, 
                    SamplerState.PointClamp,
                    null,
                    null,
                    null,
                    cam.getTransformation(this.GraphicsDevice));