Tag: xna

如何在应用新设置时阻止处理GraphicsDevice?

我的游戏窗口允许手动resize,这意味着它可以像任何其他普通窗口一样通过拖动其边缘来resize。 游戏还使用了RenderTarget2D rt2d ,主渲染目标在主Draw方法中设置: GraphicsDevice.SetRenderTarget(rt2d) ,但它在主要结尾处重置为null (默认渲染目标) Draw方法,这让它有点混乱:这真的是问题的根源,在Render Target设置为rt2d的时刻之前调整游戏窗口的大小,而不是重置回默认值? 现在它看起来像。 主Draw方法中的代码应始终将主Render Target重置为null ,因此没有预期的情况,通常不会发生这种情况。 尽管如此,调整游戏窗口大小的结果有时会导致GraphicsDevice.isDisposed返回true ,然后游戏会在第一个SpriteBatch.End()处抛出System.ObjectDisposedException 。 我发现这个错误的post可以追溯到XNA的第一天,但​​没有一个很好的解释(并且也没有提到更改渲染目标,所以它可能也是这些海报问题的根源)。 现在,我可以通过调用此方法几次来触发此错误: graphics.PreferredBackBufferWidth = graphics.PreferredBackBufferWidth; graphics.PreferredBackBufferHeight = graphics.PreferredBackBufferHeight; graphics.ApplyChanges(); …在Draw主方法中使用以下几行: RenderTarget2D rt2d = new RenderTarget2D(GraphicsDevice, graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight); GraphicsDevice.SetRenderTarget(rt2d); sb.Begin(); // main draw method here, it’s pretty big, so it might be taking long // enough to process to actually […]

C#将多维数组导出/写入文件(csv或其他)

您好设计一个程序,我只是想建议将multiDim数组写入文件。 我正在使用XNA,并且有一个带有Vector3(x,y,z)的多维数组。 有数十万甚至数百万的值,我希望能够将它们保存在文件中(保存游戏级别)。 我对一个想法没有偏见,我只需要存储数据……就是这样! 所有其他游戏数据,如玩家统计数据等,我正在使用XMLSerializer及其工作奇迹。 现在我正在使用xml序列化器,并且已经了解到你无法导出MultiDimarrays……这太令人沮丧(但我确信有一个很好的理由 – 希望如此)。 我玩Jagged没有运气。 使用System.IO.File.WriteAllText然后快速重新使用,仅用于字符串… daahhh 基本上我认为我需要沿着BinaryWrite方法,重新编写我自己的序列化程序,甚至尝试运行一个SQL服务器来托管大量的数据……愚蠢的想法? 请告诉我,你能否指出我的写作方向。 由于我主要有一个web(php)背景,运行同步数据/级别数据的服务器的想法对我很有吸引力……但可能不适用于此。 谢谢你的一切, 玛

XNA上的MessageBox和对话框(C#)

我将以下代码作为我的XNA游戏的一部分: private void gameOver() { if (!m_IsGameOver) { string message = String.Format(“GAME OVER!!!{0}Your score is: {1}”, Environment.NewLine, GameScore); if (MessageBox.Show(message, “GameOver”, MessageBoxButtons.OK) == DialogResult.OK) { this.Exit(); } m_IsGameOver = true; } } private void gameWon() { string message = String.Format(“You Won!!!{0}Your score is: {1}”, Environment.NewLine, GameScore); if (MessageBox.Show(message, “You Won!”, MessageBoxButtons.OK) == DialogResult.OK) { this.Exit(); […]

在MonoGame中添加内容

我是Monogame的新手 。 我正在尝试添加内容(图像),但我不能这样做。 在我看过的每个教程中,解决方案资源管理器都有一个文件夹,我可以放置资产,但不是我的。 我试图将图像添加到根文件夹,但它不起作用。 hero = Content.Load(@”Image1.png”);

如何使对象在C#XNA中移向另一个对象

我目前正试图让一个物体向另一个物体移动。 到目前为止我有这个代码试图实现它。 double angleRad = Math.Atan2(mdlPosition.Z+treeTransform.Translation.Z, mdlPosition.X-treeTransform.Translation.X); enemyPos.X += (float)Math.Cos(angleRad) * 0.2f; enemyPos.Z += (float)Math.Sin(angleRad) * 0.2f; 每当我移动我的玩家角色时,对象会移动,但不会移动到角色的当前位置。 如何将其指向当前位置?

Farseer Meter / Pixel Ratio

我用c ++中的box2d做了很多,并尝试了C#。 看起来Farseer通常用来取代Box2D(我知道Box2DXNA,但它看起来有点过时了。)所以,Farseer就是我一直在使用的。 当我使用C ++和Box2D时,每个人总是建议不要使用1像素/米的比例(出于什么原因,我不知道),并且通常建议使用大约30像素/米的某个地方。 正如我一直在研究Farseer,我看到了许多相互矛盾的陈述。 有人说使用1pixel /米,其他人说使用比例,其他人说要使用ConvertUnits.ToSimUnits和ConvertUnits.ToDisplayUnits等。 那我该怎么用? 现在,我正在使用ConvertUnits,但一切都在奇怪的地方呈现。 是否有事实上的标准或我应该去的任何事情? 提前致谢。

如何在XNA中的3D地形上绘制圆圈?

所以我一直在网上寻找这个问题的答案,但我似乎错过了一些东西。 我有一个小项目在XNA 4.0中动态创建3D地形,但我希望能够在地形上绘制一个圆(或任何其他形状,但让我们先用圆圈)。 现在我已经阅读了一些关于“投射纹理”的内容,但我承认,当涉及着色器语言时,我完全失去了。 我的想法是,我可以(动态地)创建一个基本形状,比如一个直径为2’单位的圆,然后在地形上绘制它作为光标所在的指示器。 (我能够在3D地形上获得光标位置。) 有谁知道如何做到这一点,是否需要使用着色器? 对此事的任何帮助都是相关的! 提前致谢!

相机旋转与任意平面对齐

我认为对于相机来说,这是一个相当简单的场景,但我的穴居人大脑拒绝思考任何超过两个维度的东西。 我的3D相机需要在物体后面对齐。 这个物体可以粘在任何表面上,因此相机对“向上”的概念可以是任意向量。 它与这个问题非常相似,但由于我不直接控制’播放器’对象,而是尝试使用CreateLookAt,我无法理解解决方案: 如何在使用四元数相机时计算旋转? 为了简化测试,我们假设对象在球体上。 我目前有: 目标对象在3D空间中的绝对位置。 单位向量,表示对象当前所在表面的法线。 在这种情况下,球体上三角形的法线。 X和Y角描述了摄像机应如何绕物体运行。 我相信这就是所需要的,但我不确定如何以一种有效的方式将它们组合在一起。 我知道我需要通过对象来转换角度相机,我最好的尝试如下: Matrix orientation = Matrix.CreateRotationY(OrbitYaw) * Matrix.CreateRotationX(OrbitPitch); orientation.Up = CurrentNormal; orientation.Right = Vector3.Cross(orientation.Forward, orientation.Up); orientation.Right = Vector3.Normalize(orientation.Right); orientation.Forward = Vector3.Cross(orientation.Up, orientation.Right); orientation.Forward = Vector3.Normalize(orientation.Forward); Vector3 Target = ObjectPosition; Vector3 Position = Vector3.Transform(new Vector3(0,50,0), orientation); Matrix View = Matrix.CreateLookAt(Position, Target, CurrentNormal); 定位代码似乎是正确的,但由于第二个问题,很难分辨:相机在位置变化时似乎“滚动”。 这是有道理的 – […]

如何从一个纹理中显示许多精灵,让它们以XNA 4.0的间隔移动

嗨,我是xna的新手,我正在尝试制作一个简单的游戏,你的小船可以四处移动,避免从顶部到底部坠落的小行星。 我有船移动和一颗小行星坠落,但我不知道如何让大量的小行星从相同的纹理下落,以及如何让它们间隔下降。 到目前为止这是我的小行星类: namespace Asteroids { class Asteroids { Texture2D AsteroidTexture; Vector2 Position; Random random = new Random(); float AsteroidSpeed = 5; public void Initialize() { Position.Y = 0; Position.X = random.Next(0, 1000); } public void Update() { Position.Y += AsteroidSpeed; if (Position.Y > 600) { Position.Y = 0; Position.X = random.Next(0, 1000); } } […]

不知道如何修复此StackOverflowexception是未处理的错误

第一次在这里发帖,我知道我可能会对我的编码感到沮丧,但我是12年级的学生并且为我的软件专业自学这门语言,我今天才开始理解课程,所以我试着重新做游戏中的这种游戏还远没有完成。 抱歉很长的代码,但我真的无法弄清楚什么是错的,在game1.cs只是player.LoadContent(内容),player.Update(gameTime)和player.Draw(spriteBatch),玩家是对象对于Player_Main类。 namespace HonourInBlood { public class Player_Main //This class deals with updating all other classes { public Player_Sprite psprite = new Player_Sprite(); public Player_Movement pmove = new Player_Movement(); public Player_Stats pstats = new Player_Stats(); public Player_Abilities pabilities = new Player_Abilities(); public Player_Controls pcontrols = new Player_Controls(); public Player_Main() { } public void Update(GameTime gameTime) […]