Tag: xna 4.0

无法在Visual C#2010 Express中访问构建配置管理器或构建配置

全文 通常,当我安装Visual C#2010 Express时,我要做的第一件事就是切换到专家设置。 这使我可以访问构建配置和相应的管理器。 这最近的装置似乎行为不端。 我创建的第一个项目是XNA 4.0(刷新)项目。 我导入了一些旧代码,切换到专家设置,并确认我能够访问构建配置管理器和构建配置工具栏。 但是,当我打开项目属性并切换到Build选项卡时,无法找到正常的Configuration和Platform下拉列表。 此外,即使Debug在工具栏/管理器中被选为活动状态,也明确使用了Release设置。 我尝试了从重新启动Visual Studio到手动编辑.csproj XML的所有内容 – 顺便说一下,它将Debug标记为活动配置:not Release。 有趣的是,无论构建配置的顺序如何,如果存在Release,那么这将是项目属性中实际处于活动状态的配置(未从工具栏的下拉列表中选择)。 请记住,出于某种原因,通常出现在项目属性页面上的下拉列表不存在。 没有运气,我在一个单独的解决方案中创建了两个新项目:一个控制台应用程序和一个WinForms应用程序。 这次,构建配置管理器甚至没有出现在Build菜单中,并且工具栏中的下拉列表被禁用,好像我甚至没有打开解决方案。 我进行了搜索和搜索,但是我找不到这种行为的解释或解决方案。 注意:我确实可以通过MSDN访问Visual Studio 2010,因此如有必要,升级是一种可行的解决方案。 TL;博士 是的,我已切换到专家设置。 Windows 8 Pro,最新 Fresh-ish Visual C#2010 Express安装 XNA 4.0刷新 问题 新的XNA项目: 切换构建配置对实际配置没有影响; 尽管如此,它始终坚持释放。 在项目属性 – > Build中,不存在构建配置/平台的下拉列表。 新的控制台/ WinForms项目: Build Configuration Manager不在Build菜单中。 构建配置工具栏已禁用下拉列表,并且未选择任何内容。 已经尝试过了 删除发布配置 效果:切换到调试 重新创建发布配置 效果:删除时切换到Debug,然后在重新创建时切换回Release […]

创建圆角矩形Texture2D

我正在构建一个带有对话框的游戏,我希望能够在程序上为这些盒子生成纹理,其风格与最终幻想系列非常相似(想想最终幻想VII )。 这是我到目前为止的代码片段: public class DialogBox { public Rectangle BoxArea { get; set; } public List BoxColors { get; set; } public List BorderColors { get; set; } public int BorderThickness { get; set; } public int BorderRadius { get; set; } private Texture2D texture; public void CreateBackdrop(ref GraphicsDevice graphics) { texture = new Texture2D(graphics, […]

XNA游戏性能

我正在使用C#2010和XNA 4.0编写游戏。 我希望它是一个好游戏,而不是“只是另一个废话”,所以我的目标之一是良好的帧率。 为此,我想请教您一些建议,无论是XNA相关还是C#相关 – 我该怎么做才能加快我的代码速度,从而提高FPS。 这是我发现的一些东西: (c#)使用list array将大大提高性能,以防你想要访问大量数据(甚至很多:拥有20000个项目的数组给出了近200%的FPS列表的180%。 (c#)使用for而不是foreach将提高性能。 在相同的20000元素上,它就像5-10%的差异。 (xna和c#)调用方法会降低性能,因此当我将代码分散到调用其他方法等的方法时,一切都非常酷且面向对象,每次调用的成本为1-3 FPS。 (xna)更新与绘制:当我将代码放入update()和draw()时,性能没有区别,所以如果你不太在意,你不必在update()下放一些方法而不是保持一切都在draw()希望更好的FPS。 (xna)不知道它是我还是4.0,但当你加载一个带有大量纹理的.X和非常复杂的网格时,需要很多时间来加载。 我不得不编写自己的.X加载器和网格/模型渲染器,因为XNA开始为每个三角形加载纹理,无论前一个三角形是否具有相同的纹理。 即使编写我自己的缓存纹理的内容加载器也不是解决方案,因为它仍然被使用了很多次。 如果你做了一些漂亮而蓬松的东西我建议使用drawuserprimitives而不是Model类。 (不知道是否只有4.0,或者3.1也有这样的性能问题) (xna和c#)尽量避免在绘图时使用“new”。 我在网上看到了一些代码,什么是复制/粘贴在一起并且有“basicEffect = new BasicEffect(graphicsDevice);” draw()中的这种丑陋,甚至更糟:在draw()中的迭代中。 这会扼杀表现。 而不是在“游戏”或静态类中有一个这样的类。 这也适用于其他“临时对象”:丑陋但我认为最好创建一些全局的东西,然后注意使用它然后制作一个漂亮而蓬松的代码,因为垃圾收集器会使我们的游戏变得更好。 好吧,所以长话短说,请在这里发表一些好的建议,这样我/我们就可以做出好的,快速的,优化的游戏;) 提前致谢:Zéiksz

旋转附加到其他对象的对象

我有一个关于单个网格(建筑物)的问题,其中包含一组动画对象(这些对象构成了整个建筑物,在构造时从地面上升,以不同的速度和旋转)。 网格中的动画对象都有自己的位置和旋转动画轨迹。 我将它从3DS Max导出为ASE,将其转换为适当的格式并在我的游戏引擎中使用它。 所以,目前,我可以成功地显示网格中所有动画对象的动画位置。 执行以下操作: 比例,旋转和平移变量是建筑物的转换信息。 这对所有子对象都有效。 pos变量表示相对于建筑物中心的子对象位置。 foreach (GeometricObject geoObject in mesh.GeoObjects) { Vector3 pos = geoObject.AnimationData.PositionTrack[(int)m_keyFrameTime]; Vector3 translatedPos = new Vector3(translation.X + pos.X, translation.Y + pos.Y, translation.Z + pos.Z) _eRenderer.ActiveCamera.World = Matrix.CreateScale(scale) * Matrix.CreateFromQuaternion(rotation) * Matrix.CreateTranslation(translatedPos); } 这将完美地显示动画建筑(从地面升起),并且所有子对象都处于正确的位置。 现在,当我尝试旋转子对象时,问题出现了。 我尝试了很多不同的方法,但在旋转子对象后,子对象的转换似乎总是搞砸了。 这就是我现在所拥有的,但它仍然搞砸了: foreach (GeometricObject geoObject in mesh.GeoObjects) { Vector3 pos = geoObject.AnimationData.PositionTrack[(int)m_keyFrameTime]; Vector3 […]

xna 4.0和加载图像失败

我正在尝试将png图像加载到我的游戏中,但由于某种原因它无法找到图像。 这是我尝试加载图片的标题屏幕: public TitleScreen(ContentManager contentManager) { titleScreen = contentManager.Load(“gfx\\titleScreen”); bgScreen = contentManager.Load(“gfx\\bgScreen”); arialFont = contentManager.Load(“Arial”); } 我在这里设置内容的根目录: Content.RootDirectory = “Content”; 当我的程序点击屏幕截图时,它无法找到图像,但是它的路径是正确的,图像也被设置为内容并复制到输出目录。 当我尝试调试它时,它告诉我它找不到图像“Content \ gfx \ titleScreen.xnb”。 出于某种原因,它试图加载一个xnb文件,是否有我可以更改它的地方,或者我还需要做任何其他事情吗?

围绕中心向量2点旋转对象

我应该在这个前言,我不是一个数学家附近。 我在另一个问题中找到的代码似乎有点工作……除了它导致我放置的对象大部分在屏幕外旋转。 这是代码: public void Update(GameTime gameTime) { Location = RotateAboutOrigin(Center, Origin, 0.01f); } public Vector2 RotateAboutOrigin(Vector2 point, Vector2 origin, float rotation) { var u = point – origin; //point relative to origin if (u == Vector2.Zero) return point; var a = (float)Math.Atan2(uY, uX); //angle relative to origin a += rotation; //rotate //u is now […]

XNA可以处理多少(低多边形)模型?

我知道以下是一个模糊的问题,但我遇到了我在XNA中没有预料到的性能问题。 我有一个低多边形模型(它有18个面和14个顶点)我试图绘制到屏幕a(高!)次。 我得到超过60 FPS(在一台体面的机器上),直到我画这个模型5000+次。 我在这里问得太多了吗? 我非常希望至少将这个数字加倍或加倍(10-15k)。 我实际绘制模型的代码如下。 我试图从绘制周期中尽可能多地消除计算,是否有更多可以从中挤出,或者更好的替代方案? 注意:tile.Offset在初始化期间计算一次,而不是每个周期计算一次。 foreach (var tile in Tiles) { var myModel = tile.Model; Matrix[] transforms = new Matrix[myModel.Bones.Count]; myModel.CopyAbsoluteBoneTransformsTo(transforms); foreach (ModelMesh mesh in myModel.Meshes) { foreach (BasicEffect effect in mesh.Effects) { // effect.EnableDefaultLighting(); effect.World = transforms[mesh.ParentBone.Index] * Matrix.CreateTranslation(tile.Offset); effect.View = CameraManager.ViewMatrix; effect.Projection = CameraManager.ProjectionMatrix; } mesh.Draw(); } }

‘最近邻’缩放

当我绘制拉伸的Texture2D ,像素会获得类似模糊的效果。 我想在我的游戏中使用’像素化’图形,并想知道如何禁用这个以支持最简单的最近邻居缩放。 我已创建此图片以供说明:(x4 zoom) 我能以什么方式实现这一目标?

如何在运行时在XNA中加载纹理?

我正在开发一个使用XNA框架进行3D渲染的应用程序。 我现在想从文件加载纹理。 到目前为止我找到了两种方法: Texture2D.FromStream(GraphicsDevice, Stream)这种方法的问题是它只加载gif,png和jpg,我还需要支持tga图像。 创建ContentManager对象。 这种方法的问题在于,似乎需要将所有纹理静态添加到项目中,从文档中说明:“在ContentManager加载资产之前,您需要将资源添加到游戏项目中”。 有问题的程序是一个关卡编辑器,需要的纹理事先不知道。 有没有其他简单的方法来加载纹理,我正在考虑使用其他类加载图像(虽然我不知道哪个,我不是很熟悉C#)然后可能使用Texture2D.SetData方法? 有没有其他简单的方法来实现我想要实现的目标?

手动控制何时重绘屏幕

我正在尝试为XNA制作一个回合制的roguelike引擎。 我基本上是使用一个名为libtcod的基于SDL的roguelike库完成之前的工作来移植游戏。 如何修改基本的XNA模板,使游戏不会每帧重绘屏幕,而是在我想要的时候?