この質問は以前に何度も聞かれたことを知っています。ただし、1時間以上のグーグル検索の後に見つけたすべてのソリューションは、本質的に同じものです. 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 クラスのドキュメントを精査してきましたが、上記以外のことを行う必要があることを示す情報を見つけることができませんでした。
また、XNA グラフィック カードの互換性に関する wiki エントリがしばらく更新されていないように見えますが、グラフィック カード (ATI HD 5870) で十分であると確信しています。
上記のグラフィックス カード、Visual C# 2010 Express、および最新バージョンの XNA を使用して、Windows 7 で実行しています。
だから、誰かが私がどこを台無しにしているかを見つけるのを手伝ってくれることを願っています. 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# を使用するのは 2 日目です。これが本当にばかげたエラーによるものである場合は、時間を無駄にして申し訳ありません。