Tag: xna

获得点和原点之间的角度

这可能以前已经回答过,如果有的话,对不起。 我基本上需要从原点到点获得角度。 那么让我们说Origin是(0,0)而我的目标点是(3,0) 。 3点= 90度 6点钟= 180度 9点钟= 270度 12点钟= 0度 不知何故,我必须做一些数学魔术,并发现角度是90度(顶部是0)。 原点可能会有所不同,所以我需要一个带有两个参数的方法,Origin和TargetPoint,它们以度为单位返回双倍角度。 是的,我意识到这看起来简短而且没有建设性,但我让这个问题尽可能简单易懂。 所有其他问题都被关闭了 – .- 谢谢

XNA:获取一个数组/资源列表?

我目前正在开发一个使用XNA(学校项目)的游戏,我想知道是否有办法在运行时列出所有资源,因为我的资源文件名为### – Name ##并且我想在第一个上对它们编制索引3位数字。

XNA View Matrix – 寻求解释

我在理解XNA中的视图矩阵时遇到了一些麻烦。 我已经与所有其他部分相距甚远,因为我刚刚学会了所需的数学,我不想使用内置的Matrix函数而不了解他们先做的事情。 现在我理解了旋转,投影和翻译的基础知识,但我无法理解视图矩阵在XNA中的工作原理。 从我收集的内容来看,视图矩阵应该将“世界”转变为它自己的空间。 看似合理,但库中的Matrix.CreateLookAt方法非常令人费解。 我已经建立(通过检查库函数输出的内容)这两段代码产生相同的结果: Matrix view = Matrix.CreateReflection(new Plane(Vector3.UnitX, 0)) * Matrix.CreateReflection(new Plane(Vector3.UnitZ, 0)) * Matrix.CreateTranslation(Position); // ..equals this if (Position = (0 0 -5), since LookAt “looks at” but the above just looks straight down Z).. Matrix blah = Matrix.CreateLookAt(Position, Vector3.Zero, Vector3.UnitY); 为什么要翻转X轴和Z轴? 我认为你应该根据摄像机的旋转来旋转世界,但是在相反的方向,然后在相反的方向上将世界翻转相同的量。 或者视图矩阵根本不用作转换,而只是编码摄像机在世界中的位置和旋转?

使用委托创建垃圾

我正在使用XNA为xbox360开发游戏。 在Xbox上,与PC上的垃圾收集器相比,垃圾收集器的性能相当差,因此将生成的垃圾保持在最低限度对于顺畅执行游戏至关重要。 我记得读过一次调用委托创建垃圾,但现在我的生活中找不到任何对委托创建垃圾的引用。 我是刚刚做到这一点还是代表们搞乱了? 如果代表是凌乱的,建议解决方法的奖励积分。 public delegate T GetValue(T value, T[] args); public static T Transaction(GetValue calculate, ref T value, params T[] args) where T : class { T newValue = calculate(value, args); return foo(newValue); } 我的代码看起来模糊不清,目前,我能想到摆脱委托的唯一解决方案是传入一个inheritance了接口IValueCalculator的类,然后我可以在该接口上调用该方法,这不是很整洁虽然!

何时归一化矢量?

我正在学习XNA和几乎所有在http://creators.xna.com/en-US/上找到的教育工具包。 我总是在向量上看到对Normalize()的调用。 我理解,normalize基本上将向量转换为单位长度,所以它给出的只是方向。 现在我的问题是何时进行标准化以及它对我有什么帮助。我正在进行2D编程,因此请在2D概念而不是3D中进行解释。 编辑:这是XNA工具包中的代码,为什么要调用Normalize? if (currentKeyboardState.IsKeyDown(Keys.Left) || currentGamePadState.DPad.Left == ButtonState.Pressed) { catMovement.X -= 1.0f; } if (currentKeyboardState.IsKeyDown(Keys.Right) || currentGamePadState.DPad.Right == ButtonState.Pressed) { catMovement.X += 1.0f; } if (currentKeyboardState.IsKeyDown(Keys.Up) || currentGamePadState.DPad.Up == ButtonState.Pressed) { catMovement.Y -= 1.0f; } if (currentKeyboardState.IsKeyDown(Keys.Down) || currentGamePadState.DPad.Down == ButtonState.Pressed) { catMovement.Y += 1.0f; } float smoothStop = 1; if (catMovement […]

如何对齐SpriteBatch.DrawString绘制的文本?

有没有一种简单的方法可以将文本对齐到右边和中心(而不是默认左边)?

C#XNA的Javascript(或类似)游戏脚本

最近我准备在XNA C#中开发另一款游戏。 我最后一次在XNA C#上玩游戏时遇到了这个问题,即必须在游戏中添加地图和可自定义的数据。 每次我想添加新内容或将某些值更改为游戏角色或其他东西时,我不得不重建整个游戏或者什么 – 这可能需要相当长的时间。 有没有什么方法可以编写游戏脚本来加载我的XNA C#游戏可以解释而无需编译的内容? 我希望Javascript。 我希望我可以添加函数和其他小API,可以从外部游戏脚本调用来操纵游戏或加载数据等。 我并不担心游戏被黑客入侵,因为它还很早 – 开发是非常重要的。 任何帮助将不胜感激。

游戏网络弹丸实施/概念问题

我试图通过同步射弹射击和游戏网络来解决常见问题的某种解决方案,但我不确定什么是最合适的。 这是一个2D动作侧卷轴,带有几个射弹(没有即时击中武器),并且已经有很多框架(C#XNA框架和Lidgren库)。 此时我认为架构将被建模,类似于半衰期源引擎。 客户端将在过去(固定步骤30fps)并使用客户端侧预测插入远程实体~100ms或大约3帧。 服务器拥有模拟权限。 考虑使用移动编码实现似乎很好,但是当涉及到射弹时,我不确定如何最好地为所有玩家提供最佳游戏。 示例问题: 客户A. 客户B. 服务器 客户A和B只是站在一起面对面。 客户端B开始向A发射并像往常一样向服务器发送输入。 服务器检测到火灾输入并开始在其模拟中发射武器,同时将事件转发给客户端A. 客户端A接收消息但过去仍然在插入客户端B(同时射弹现在在服务器和客户端Bs机器上朝向A)。 客户端A的渲染最终到达B射击射弹并开始渲染的点。 客户A看到它并跳转,轻松地在屏幕上清除它。 然而,射弹击中了他在服务器上和客户端Bs的观点。 这也是2D sidescroller所以一切都是可见的。 这似乎是使用插值的一个基本的副作用(我认为这是必须的,但我愿意接受建议),因为即使没有任何网络延迟,也存在固有的插值延迟。 题: 我知道它不可能是完美的,但有没有更多或更好的方法可以实现混淆或改善它以使它看起来很好/无缝,或者我错过任何明显的东西? 在实际发射射弹之前,武器的发射确实有一个短暂的动画时间,我意识到我们可以利用那个时间来隐藏一些延迟,但是武器不会立即射击,而且任何我看它的方式总是与客户试图躲避射弹和其他客户看到他们的射弹击中它们之间存在巨大差距。 对于玩家正在移动的情况,我们可以在服务器上使用滞后补偿,但我不认为这可以帮助这种情况? 如果射弹击中导致客户A的位置被改变,我将不得不倒回客户A并用新数据重放他的输入,或者如果它没有,我必须从空中移除射弹(也许他们死了),丑陋无论哪种方式 :(。

XNA模拟Game对象或解耦你的游戏

如果可以模拟一个Game对象来测试我的DrawableGameComponent组件,我就会徘徊? 我知道模拟框架需要一个接口才能运行,但我需要模拟实际的Game对象。 编辑:这是XNA社区论坛上各自讨论的链接 。 有帮助吗?

两个矢量2D之间的角度

我正在尝试计算两个向量之间的角度。 我试过这个,但它总是返回零: public double GetAngle(Vector2 a, Vector2 b) { double angle = Math.Atan2(bY, bX) – Math.Atan2(aY, aX); return angle; } GetAngle(new Vector2(1,1), new Vector2(50,50));