IsFullScreen从我的GraphicsDeviceManager不工作'使用XNA
本文关键字:使用 XNA 工作 我的 GraphicsDeviceManager IsFullScreen | 更新日期: 2023-09-27 17:52:38
我打算回来用XNA制作一款游戏,但我遇到了一个问题。当我使用GraphicsDeviceManager
中的IsFullScreen
并将其放在游戏构造器中的true
时,我的游戏不会全屏,它保持窗口状态。
我寻找IsFullScreen
的值,而我在Game
构造函数中其值为真,但是当我查看Update
或Draw
中的值时,值为假。
当我按下F
时,我试图将值设置为true,但没有任何改变。我也尝试使用ToggleFullScreen
, IsFullScreen
的值很好地改变了,但什么也没有发生。我试图设置PreferredBackBuffer
的宽度和高度,然后我需要使用ApplyChanges
,它把IsFullScreen
到false
每次我调用它。即使它改变了窗口大小,它也不是全屏的,所以不是我想要的。
这是我的代码,如果你看到什么告诉我,欢迎任何建议。
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
namespace MyGames
{
/// <summary>
/// This is the main type for your game
/// </summary>
public class SpaceInvader : Game
{
private readonly GraphicsDeviceManager graphics_;
private KeyboardState oldKeyboardState_;
private KeyboardState newKeyboardState_;
private SpriteBatch spriteBatch_;
private Ship playerShip_;
public SpaceInvader()
{
graphics_ = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
// Set device frame rate to 60 fps.
TargetElapsedTime = TimeSpan.FromSeconds(1 / 60.0);
graphics_.PreferredBackBufferWidth = 480;
graphics_.PreferredBackBufferHeight = 268;
}
protected override void Initialize()
{
playerShip_ = new Ship(new Vector2(Window.ClientBounds.Width / 2, Window.ClientBounds.Height - 150), new Vector2(10,10));
base.Initialize();
}
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch_ = new SpriteBatch(GraphicsDevice);
playerShip_.LoadContent(Content);
}
protected override void UnloadContent()
{
// TODO: Unload any non ContentManager content here
}
protected override void Update(GameTime gameTime)
{
newKeyboardState_ = Keyboard.GetState();
// Allows the game to exit
if (newKeyboardState_.IsKeyDown(Keys.Escape))
Exit();
// TODO: Add your update logic here
playerShip_.Update(Window, newKeyboardState_, oldKeyboardState_);
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
if (oldKeyboardState_.IsKeyDown(Keys.F) && newKeyboardState_.IsKeyUp(Keys.F))
graphics_.ToggleFullScreen();
graphics_.GraphicsDevice.Clear(Color.CornflowerBlue);
//set rendering back to the back buffer
// Draw the sprite.
spriteBatch_.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
playerShip_.Draw(spriteBatch_);
spriteBatch_.End();
base.Draw(gameTime);
oldKeyboardState_ = newKeyboardState_;
}
}
}
我用的是Windows 7和VisualStudio Ultimate 2012。
EDIT1: 我刚刚尝试了VisualStudio 2010,它工作得很好。
我还注意到我以前遇到的另一个问题,在Program.cs中我不能使用:
using (SpaceInvader game = new SpaceInvader())
{
game.Run();
}
我需要使用:
SpaceInvader game = new SpaceInvader();
game.Run();
我不知道它是否改变了什么,但它会在第二个大括号上抛出异常NullReferenceException was unhandled
。
EDIT2: 我在XNA的下载页面上看到,它允许我使用VisualStudio 2010,但它不是在谈论VisualStudio 2012。在阅读了这些页面之后,我想它不能正常工作是正常的,因为我没有做任何类似的事情来安装XNA。
我猜这是由于VS2012的问题。
哈哈。小错误,您需要添加:this.graphics.ApplyChanges();
。我曾经也做过同样的事。
我要关闭主题作为回答,因为我说过使用XNA你需要使用VS2010。
我在XNA的下载页面上看到它允许我使用VisualStudio 2010,但它不是在谈论VisualStudio 2012。在阅读了这些页面之后,我想它不能正常工作是正常的,因为我没有做任何类似的事情来安装XNA。
我猜这是由于VS2012的问题。
试试下面的代码,而不是切换bool:
isFullscreen() = true;