当前位置: 首页 > 编程语言 > C#

C#LearningTutorial-HowtoResizeaWindowUsingXNA分享

时间:2023-04-10 11:59:37 C#

HowtoResizeaWindowUsingXNA我知道这个问题已经被问过很多次了。然而,经过一个多小时的谷歌搜索,我找到的所有解决方案基本相同。每个人都说,为了在XNA中调整窗口大小,您只需在Game1类的Initiate()方法中添加以下代码行(或这些行的一些细微变化)://很多人说ApplyChanges()调用不是必需的,//正如很多人所说的那样。graphics.IsFullScreen=false;graphics.PreferredBackBufferWidth=800;graphics.PreferredBackBufferHeight=600;图形.ApplyChanges();这对我不起作用。代码编译并运行,但绝对没有任何变化。我一直在搜索GraphicsDevice和GraphicsDeviceManager类的文档,但找不到任何信息表明我需要做除上述以外的任何事情。我也很确定我的显卡是足够的(ATIHD5870),尽管看起来关于XNA显卡兼容性的wiki条目已经有一段时间没有更新了。我在Windows7上运行,使用上面的显卡、VisualC#2010Express和最新版本的XNA。所以我只是希望有人能帮我找到我搞砸的地方。我在下面发布了我的整个Game1类(我将其重命名为MainApp)。如果有人想看到任何其他类被调用,请询问,我会发布它们。公共类MainApp:Microsoft.Xna.Framework.Game{GraphicsDeviceManager图形;精灵批次精灵批次;玩家玩家;publicMainApp(){graphics=newGraphicsDeviceManager(this);Content.RootDirectory="内容";}protectedoverridevoidInitialize(){player=newPlayer();//这不会做任何事情graphics.IsFullScreen=false;graphics.PreferredBackBufferWidth=800;graphics.PreferredBackBufferHeight=600;图形.ApplyChanges();基地.初始化();}protectedoverridevoidLoadContent(){spriteBatch=newSpriteBatch(GraphicsDevice);Vector2playerPosition=newVector2(GraphicsDevice.Viewport.TitleSafeArea.X,GraphicsDevice.Viewport.TitleSafeArea.Y+2*(graphics.GraphicsDevice.Viewport.TitleSafeArea.Height/3));player.Initialize(Content.Load("basePlayerTexture"),playerPosition);}protectedoverridevoidUnloadContent(){}protectedoverridevoidUpdate(GameTimegameTime){if(GamePad.GetState(PlayerIndex.One).Buttons.Back==ButtonState.Pressed)this.Exit();base.Update(游戏时间);}protectedoverridevoidDraw(GameTimegameTime){GraphicsDevice.Clear(Color.CornflowerBlue);精灵批处理开始();player.Draw(spriteBatch);spriteBatch.End();base.Draw(游戏时间);PS这是我使用C#的第二天,所以如果这是由于一个非常愚蠢的错误,我为浪费你的时间而道歉令人沮丧的是(正如你所说)“很多人说ApplyChanges()调用是不必要的,正如许多人所说的那样”——事实上,这取决于你在做什么!(我怎么知道这一切?我已经实现了它。请参阅:这个答案。)当您在游戏启动时设置初始分辨率时:在您的构造函数中执行此操作(显然,如果您重命名Game1,请在重命名Game1之后执行此操作在命名构造函数中!)publicclassGame1:Microsoft.Xna.Framework.Game{GraphicsDeviceManagergraphics;publicGame1(){graphics=newGraphicsDeviceManager(this);graphics.PreferredBackBufferHeight=600;graphics.PreferredBackBufferWidth=800;}//...}并且在Initialize()期间不要触摸它!并且不要调用ApplyChanges()。当Game.Run()(默认模板工程在Program.cs中调用这个)时,会调用GraphicsDeviceManager.CreateDevice设置初始显示,然后调用Initialize()!这就是为什么您必须创建GraphicsDeviceManager并在Game类的构造函数中设置所需的设置(在Game.Run()之前)。如果尝试在Initialize中设置分辨率,将导致图形设备被设置两次。坏的。(老实说,我很惊讶这这么乱。这是默认项目模板中提供的代码!)在游戏运行时修改分辨率时:如果游戏中某处有“分辨率选择”菜单,并且您想要响应用户(例如)单击该菜单中的选项-然后(并且仅在那时)使用ApplyChanges。你应该只在更新时调用它。例如:publicclassGame1:Microsoft.Xna.Framework.Game{graphics.PreferredBackBufferHeight=userRequestedHeight;graphics.PreferredBackBufferWidth=userRequestedWidth;图形.ApplyChanges();}//...}//...}最后,请注意ToggleFullScreen()与以下操作相同:graphics.IsFullScreen=!graphics.IsFullScreen;图形.ApplyChanges();默认情况下,我的电脑GraphicsDevice.Viewport上的GraphicsDevice.Viewport宽度和高度是800x480,尝试设置一个明显的尺寸——比如1024x768。graphics.PreferredBackBufferHeight=768;graphics.PreferredBackBufferWidth=1024;图形.ApplyChanges();上面的Initialize代码足以为我扩展窗口。以上就是《C#学习教程:如何使用XNA调整窗口大小》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处: