Tag: xna

2D XNA游戏鼠标点击

我有一个2D游戏,我只使用鼠标作为输入。 我怎样才能使鼠标hover在Texture2D对象上,Texture2D和鼠标光标发生变化,当点击纹理时,它移动到另一个地方。 简单地说,当我将鼠标hover在纹理2上时,我想知道如何做某事。

轨道力学

有没有人有一个实施轨道力学的例子(最好是在XNA中)? 我目前使用的代码如下,但它执行时并没有“感觉正确”。 物体只是稍微向地球弯曲,无论我调整多少变量,我都无法进入轨道,甚至是部分轨道。 shot.Position += shot.Velocity; foreach (Sprite planet in planets) { Vector2 directionToPlanet = (planet.Position – shot.Position); directionToPlanet.Normalize(); float distance = Vector2.DistanceSquared(shot.Position, planet.Position); float gPull = (float)(planet.gravityStrength * (planet.Mass * shot.Mass) / distance) + planet.gravityField; shot.Position += new Vector2(directionToPlanet.X * gPull, directionToPlanet.Y * gPull); } 编辑标记Mendelt的答案是正确的,指出我需要更新速度,而不是位置。 我还需要将gPull的计算更改为 float gPull = shot.Mass * planet.Mass / […]

有没有从XNA中的Bitmap对象创建Texture2D的快速替代方法?

我已经环顾了很多,我发现从Bitmap创建Texture2D的唯一方法是: using (MemoryStream s = new MemoryStream()) { bmp.Save(s, System.Drawing.Imaging.ImageFormat.Png); s.Seek(0, SeekOrigin.Begin); Texture2D tx = Texture2D.FromFile(device, s); } 和 Texture2D tx = new Texture2D(device, bmp.Width, bmp.Height, 0, TextureUsage.None, SurfaceFormat.Color); tx.SetData(rgbValues, 0, rgbValues.Length, SetDataOptions.NoOverwrite); 其中rgbValues是一个字节数组,包含32位ARGB格式的位图像素数据。 我的问题是,我可以尝试更快的方法吗? 我正在编写一个地图编辑器,它必须读取自定义格式图像(地图图块)并将它们转换为Texture2D纹理才能显示。 以前版本的编辑器是一个C ++实现,它首先将图像转换为位图,然后转换为使用DirectX绘制的纹理。 我在这里尝试了相同的方法,但是上述两种方法都非常慢。 要加载到内存中,映射所需的所有纹理都需要第一个方法~250秒,对于合理的规格计算机,第二个方法需要~110秒(为了比较,C ++代码大约需要5秒)。 如果有一种方法可以直接编辑纹理数据(例如使用Bitmap类的LockBits方法),那么我就可以将自定义格式图像直接转换为Texture2D,并希望节省处理时间。 任何帮助将非常感谢。 谢谢

C#中“新”的性能成本?

在C#中,使用new关键字的性能成本是多少? 我特别提到了与游戏开发有关的问题,我知道在C ++中,每个更新周期都是新手,这是一个明确的禁忌。 这同样适用于C#吗? 我正在使用XNA并开发移动设备。 只是真的问一个优化问题。

如何减慢或停止XNA中的按键操作

我已经开始使用XNA Framework编写游戏,并且遇到了一些我不知道如何正确解决的简单问题。 我正在使用Texture2D显示菜单并使用键盘(或游戏手柄)我更改了所选的菜单项。 我的问题是用于在菜单项之间切换的当前函数太快了。 我可能会单击向下按钮,它将关闭5或6个菜单项(由于Update()被多次调用,因此更新所选项目)。 ex. (> indicate selected) > MenuItem1 MenuItem2 MenuItem3 MenuItem4 MenuItem5 I press the down key for just a second), then I have this state: MenuItem1 MenuItem2 MenuItem3 > MenuItem4 MenuItem5 What I want is (until I press the key again) MenuItem1 > MenuItem2 MenuItem3 MenuItem4 MenuItem5 我正在寻找的方法是让玩家多次点击向上/向下键以便从一个菜单项转到另一个菜单项,或者在进入下一个菜单项之前有一些最小的等待时间。

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

如何在XNA中实现蠕虫风格的可破坏地形?

我想为我的游戏制作一个想法的原型。 这个游戏的想法是玩家将挖掘地面,创建隧道和寻找宝藏。 我正在寻找创造’蠕虫风格’的地形,通过碰撞检测让玩家在隧道中游荡和跳跃。 在这些图片中可以看到这种类型的动态地形的例子。 示例1 http://img301.imageshack.us/img301/1675/30184730wd6.png 我的问题是如何实现这种类型的可破坏地形的最佳方法? 我正在使用XNA游戏工作室。

C#/ .NET作为新标准游戏开发平台的可行性?

很长一段时间以来,C ++一直是主导的游戏开发语言。 许多AAA质量的3D引擎可用于任何预算。 我的问题是,随着XNA的兴起,C#和.NET框架已经定位好,可以作为新的标准游戏开发平台接管吗? 显然,XNA框架(Windows,Xbox,Zune)固有的跨平台特性有其优点,但这些优势是否足以吸引大型游戏开发工作室转换? 就个人而言,我在使用C#/ XNA进行新项目和使用Java通过jMonkeyEngine之间徘徊不定。 我非常希望能够将我的游戏移植到多个平台上,而我所知道的唯一能够完成此任务的语言是C#和Java。 我很想看到由OpenGL驱动的XNA代码库的实现,并且可以在Mono上运行,但我认为这只是一厢情愿的想法。 我很想知道其他人在用C ++以外的东西构建3D游戏时所经历的事情。

归航导弹,它们如何工作?

我想要创造什么 向玩家发射导弹的物体,如果与玩家发生碰撞,玩家将死亡。 问题 导弹是如何向玩家移动的。 如何使导弹移动,使其不会立即直接向玩家移动(以一个角度缓慢移动)。 我有一个让鼠标成为“玩家”和导弹的公式。 mouse = Mouse.GetState(); mousePosition = new Vector2(mouse.X, mouse.Y); A = (mouse.X – Position.X); B = (mouse.Y – Position.Y); C = (A * A) + (B * B); C = (float)Math.Sqrt(C); Angle1 = A / C; Angle2 = B / C; (绘图是最好的!) 这只能获得从导弹到玩家的距离,现在我需要找到移动导弹的角度或东西,我需要做什么?

WindowsForms的每像素碰撞检测算法

我正在为Windows窗体搜索每像素碰撞检测算法/方法。 我搜索过它,但我只找到一个用于XNA(如下所示)。 这种算法难道不符合Windows Forms的概念吗?! /// /// Determines if there is overlap of the non-transparent pixels /// between two sprites. /// /// Bounding rectangle of the first sprite /// Pixel data of the first sprite /// Bouding rectangle of the second sprite /// Pixel data of the second sprite /// True if non-transparent pixels overlap; false […]