Tag: xna

XNA ViewPort投影和SpriteBatch

我正在开发一个XNA游戏,我正在使用ViewPort.Project和ViewPort.Unproject来转换世界坐标和从世界坐标转换。 目前我将这些用于我使用SpriteBatch绘制的每个对象。 我想做的是计算一个矩阵,我可以发送给SpriteBatch.Begin为我做屏幕空间转换。 以下是我目前用于在屏幕空间中进行翻译的function: Vector2 ToWorldCoordinates(Vector2 pixels) { Vector3 worldPosition = graphics.GraphicsDevice.Viewport.Unproject(new Vector3(pixels, 0), Projection, View, Matrix.Identity); return new Vector2(worldPosition.X, worldPosition.Y); } Vector2 ToScreenCoordinates(Vector2 worldCoords) { var screenPositon = graphics.GraphicsDevice.Viewport.Project(new Vector3(worldCoords, 0), Projection, View, Matrix.Identity); return new Vector2(screenPositon.X, screenPositon.Y); } 视图设置为Matrix.Identity,Projection设置如下: Projection = Matrix.CreateOrthographic(40 * graphics.GraphicsDevice.Viewport.AspectRatio, 40, 0, 1); 以下是我目前的绘画方式: spriteBatch.Begin(); foreach (var thing in […]

‘最近邻’缩放

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

每像素冲突代码

我试图理解检查游戏中两个对象之间碰撞的代码 – 每像素碰撞。 代码是: /// /// 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 […]

随机二维拼贴地图生成算法

谁能告诉我一种生成岛屿结构或山地结构的方法,比如我的世界? 我只是在为随机形状生成寻找合适的理论,但它应该保持一个定义的基本模式。 喜欢:岛屿应该是圆形的,但在形状和尺度上变化(最小/最大宽度和高度)。 或:河流不应该是直线,它们应该有曲线和随机宽度。 甚至:生成某种森林,其中树木以一种用户仍然可以穿过森林的方式放置(我认为这是一个简单的森林,只是说树周围的一些块应该保持空白,如果代码试图放置最后一棵树周围的树木更多) 我可以用什么样的数学来做这些事情? 我会很高兴有一些教程或参考的链接。 我在网上搜索了几个小时,但我能找到的只是一些书籍,比如“游戏数学”或其他东西,但我的预算设定为零。 编辑: 首先,我很抱歉我的不好意思。 中学我想感谢你们所有人的答案。 这些都是很好的参考,我会花很多时间深入研究。

Microsoft XNA Game Studio的替代品?

出于某种原因,XNA Game Studio无法在我的电脑上运行。 :(。它说的是关于像素着色器的东西,我的硬件不支持某些东西或其他。我只需要制作一些体面的2D游戏和演示。我也不认为它可以在我的目标受众的PC上工作(来自发展南亚国家)。 那么XNA有什么替代方案可以让我获得相同的性能并拥有足够成熟的API吗?

为什么Math.Cos返回错误的值?

在我的代码中: Vector2 colCircle = new Vector2(); colCircle = new Vector2((R * Math.Sin(D)), -(R * Math.Cos(D))); 而: R = 22.627 D = 89.214 在我的计算器上检查时,X值是正确的,但Y值应该是-0.310,但在程序中它是-7.134。 有什么想法吗?

如何在调整窗口或容器大小时修复滚动条?

目前在我的应用程序中,我使用HScrollBar和VScrollBar在大图像中进行平移。 显示的图像部分基于滚动条的Value属性。 但是,在调整SplitContainer的大小或调整窗体窗口大小时,滚动条的值不会自动更新,它可能会在屏幕外呈现某些内容。 此时我注意到,如果你单击滚动条的箭头,它会神奇地修复滚动条。 我想知道是否有任何方法来模拟单击滚动条在Form_Resize和SplitContainer_Resize事件处理程序中执行此操作但我找不到任何内容。 必须在所有resize事件中手动调整滚动条的值是缓慢,丑陋,并且不能很好地工作。 我真的很喜欢滚动条在窗口调整时自动修复自己,就像点击它的箭头时一样,但我不确定如何。

将.dds转换为.png:XNA真的令人费解吗?

我有一个.dds文件,我想要一个.png文件。 虽然我已经发现了 DevIL.NET库 ,但是一个静态类的API设计没有并行化,所以我希望找到另一种方法。 这让我想到了XNA。 但是,这就是我对这个想法的了解…… 好吧,看起来我想要这个Texture2D类; 然后我可以调用myTexture2D.SaveAsPng 。 但是如何从我的.dds文件中获取其中一个呢? 那么文档似乎表明我想使用myContentManager.Load 。 哦,废话,不是它,这是某种游戏内容管理系统。 好吧,我的搜索似乎已经出现了很多myTexture2D.LoadFile ; 我会去那。 我错过了汇编参考或其他什么? 哦不,我明白了,他们在3.1和4.0之间删除了那个方法,很棒。 好吧,这有点烦人,但myTexture2D.LoadStream并不是真正的问题。 等等现在这是什么? 它想要一个GraphicsDevice ? 嗯,看起来人们通常会通过GraphicsDeviceManager获得其中一个……哦等等,我不会再去那条路了,不再是Manager给我的。 我想我应该手动实例化这个东西。 好吧,这不是太难… var myGraphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile.HiDef, (噢,这个PresentationParameters东西是好的,我只是尝试new PresentationParameters()); var myGraphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile.HiDef, 那是一个例外。 他们想要我的PresentationParameters一个DeviceWindowHandle ? 但我正在运行一个控制台应用程序! 所以我真的希望有一种不太复杂的方式来做这件事; 也许我可以使用某种默认的GraphicsDevice 。 创建一个整个窗口只是为了将.dds转换为.png感觉很愚蠢。 我想,对于我的转换问题的其他建议表示欢迎,尽管理解如何从一般的非XNA代码中使用XNA可能是值得的。

使用Json.NET序列化XNA矩形

我正在使用Json.NET首先看看这个: using System.Drawing; string json = JsonConvert.SerializeObject(new Rectangle(-3,6,32,32), Formatting.Indented); Console.WriteLine(json); Rectangle deserializedRectangle = JsonConvert.DeserializeObject(json); 一切都按预期工作。 控制台输出为:“3,6,32,32” 但是当我想用XNA Rectangle做同样的事情时,我得到一个错误。 (只是用“使用Microsoft.Xna.Framework;”替换了旧的使用方法;) 控制台输出为:“{X:-3 Y:6宽度:32高度:32}” 它抛出的错误是:“转换值”{X:-3 Y:6宽度:32高度:32}时出错“输入’Microsoft.Xna.Framework.Rectangle’。” 为什么会这样? 什么是错的,我该如何解决这个问题?

我想使用Texture2d作为system.drawing.bitmap

XNA.Texture2D到System.Drawing.Bitmap我确信这回答了我的问题,但它链接了一个外部网站,不再可用。 我在xna游戏中使用Windows窗体。 我想为我的一个面板使用背景图像。 从文件加载很容易,但是当游戏部署到另一个系统时,文件位置显然会有所不同。 Bitmap bmp = new Bitmap(@”c:\myImage.png”); 在上面提到的问题中,有人建议使用Texture2d.saveToPng,然后从内存流中打开位图。 这听起来不错,如果有人可以引导我朝这个方向发展。 还有其他想法吗?