代码之家  ›  专栏  ›  技术社区  ›  Adam Haile

PC上XNA的字母拳击

  •  0
  • Adam Haile  · 技术社区  · 15 年前

    我知道在XNA中为Xbox开发时,您基本上只需将分辨率设置为1280x720,Xbox就可以解决问题,但在PC上,我在正确处理分辨率方面遇到了一些问题。

    我希望它能够运行在其他决议,但我真的很高兴使游戏始终宽屏,只是在4:3屏幕上的信箱。我已经可以处理缩放游戏和它的组件,但我不知道如何得到它的信箱。

    最好的办法是什么?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    你可以 GraphicsDevice.Viewport 添加到要使用的视口。

    The documentation 有一个如何做到这一点的例子(它为分割屏幕这样做,但单个视图的字母装箱是相同的概念)。

    另外你的 投影空间 SpriteBatch 在视口的像素大小的空间中工作,而不是投影空间,因此如果视口大于或小于1280x720,则可能需要进行缩放;我将详细介绍此操作所涉及的各种空间 this answer ).

    GraphicsDevice.Clear(Color.Black) 将视口设置为全屏。

        2
  •  2
  •   user193476 user193476    15 年前

    GraphicsDevice.Viewport SpriteBatch ,并可能使用仿射翻译来定位您的sprite批处理中心屏幕。

    你可以打电话 GraphicsDevice.Clear 每一帧,但如果这似乎有点浪费你,然后只是画一个黑色矩形,而不是清除在新的视口。

    例如,假设您想要16:9的纵横比,您可以这样做(请记住,我使用的是XNA4,所以可能会有点不同):

    float aspect = 16.0f / 9.0f;
    
    GraphicsDevice.Clear(Color.Black);
    Matrix transform = Matrix.CreateScale(1, GraphicsDevice.Viewport.AspectRatio / aspect, 1) * Matrix.CreateTranslation(0, (GraphicsDevice.Viewport.Height - GraphicsDevice.Viewport.Height / aspect) / 4.0f, 0);
    spriteBatch.Begin(SpriteSortMode.Immediate, null, null, null, null, null, transform);
    
    // do your drawing here
    
    sBatch.End()
    

    没有必要重建 transform 每次这样你就可以把它作为一个私有成员变量存储在 Game .