我知道这个问题已经被问过很多次了。但是,我在谷歌搜索一个多小时后找到的所有解决方案基本上都是一样的。每个人都说,为了在 XNA 中调整窗口大小,您只需将以下代码行(或这些代码行的一些细微变化)添加到 Game1 类的 Initiate() 方法中:
//A lot of people say that the ApplyChanges() call is not necessary,
//and equally as many say that it is.
graphics.IsFullScreen = false;
graphics.PreferredBackBufferWidth = 800;
graphics.PreferredBackBufferHeight = 600;
graphics.ApplyChanges();
这对我不起作用。代码编译并运行,但绝对没有任何变化。我一直在搜索 GraphicsDevice 和 GraphicsDeviceManager 类的文档,但我找不到任何信息表明我需要做除上述之外的任何事情。
我也相当确定我的显卡是足够的(ATI HD 5870),虽然看起来 XNA 显卡兼容性的 wiki 条目已经有一段时间没有更新了。
我在 Windows 7 上运行,使用上述显卡、Visual C# 2010 Express 和最新版本的 XNA。
所以我只是希望有人可以帮助我找到我搞砸的地方。我将在下面发布我的整个 Game1 类(我将其重命名为 MainApp)。如果有人想查看任何其他被调用的课程,请询问,我会发布它们。
public class MainApp : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Player player;
public MainApp()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
protected override void Initialize()
{
player = new Player();
//This does not do ANYTHING
graphics.IsFullScreen = false;
graphics.PreferredBackBufferWidth = 800;
graphics.PreferredBackBufferHeight = 600;
graphics.ApplyChanges();
base.Initialize();
}
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
Vector2 playerPosition = new Vector2(GraphicsDevice.Viewport.TitleSafeArea.X,
GraphicsDevice.Viewport.TitleSafeArea.Y
+ 2*(graphics.GraphicsDevice.Viewport.TitleSafeArea.Height / 3));
player.Initialize(Content.Load<Texture2D>("basePlayerTexture"),
playerPosition);
}
protected override void UnloadContent()
{
}
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
player.Draw(spriteBatch);
spriteBatch.End();
base.Draw(gameTime);
}
}
PS 这是我使用 C# 的第二天,所以如果这是由于一个非常愚蠢的错误,我很抱歉浪费你的时间。