Questions tagged «xna»

XNA是Microsoft的一种游戏框架,允许部署Windows,Windows Phone和Xbox 360。

7
游戏中绘画与逻辑的分离
我是一个刚刚开始玩游戏开发的开发人员。我是.NET专家,所以我迷上了XNA,现在正在为iPhone使用Cocos2d。我的问题确实更笼统。 假设我正在构建一个简单的Pong游戏。我要上Ball一Paddle堂课。来自商业世界的发展,我的第一个直觉是在这两个类中的任何一个中都没有任何绘图或输入处理代码。 //pseudo code class Ball { Vector2D position; Vector2D velocity; Color color; void Move(){} } 球类中没有任何东西可以处理输入或处理绘图。然后,我将有另一个班级,Game班级或我的班级Scene.m(在Cocos2d中)将球更新,并且在游戏循环中,它将根据需要操纵球。 事实是,在许多有关XNA和Cocos2d的教程中,我看到了这样的模式: //pseudo code class Ball : SomeUpdatableComponent { Vector2D position; Vector2D velocity; Color color; void Update(){} void Draw(){} void HandleInput(){} } 我的问题是,对吗?这是人们在游戏开发中使用的模式吗?它以某种方式与我习惯的一切背道而驰,让我的Ball类做所有事情。此外,在第二个示例中,我Ball知道如何移动,如何使用Paddle?是否Ball需要了解Paddle?在我的第一个示例中,Game该类将同时引用Ball和和Paddle,然后将这两个都发送给某个CollisionDetection管理器或其他东西,但是如果每个单独的组件自己完成所有工作,那么我该如何处理各种组件的复杂性呢?(我希望我有道理.....)

3
将敌人随机放置在二维网格上
我想将物品和敌人随机放置(或尽可能随机放置)。目前,我使用XNA的Random类来生成一个介于X的800和Y的600之间的数字。感觉就像敌人向地图顶部生成的次数多于在中间或底部生成的数。我没有为生成器添加种子,也许这是要考虑的事情。 是否描述了其他可以改善2D网格上随机敌人放置的技术?
11 xna  2d  sprites  random 

2
XNA和Xbox 360可以联网吗?
我知道Xbox 360的XNA只能访问网络,据传它仅允许通过Microsoft协议与其他Xbox 360进行通信。 XNA提供哪些联网可能性?多少个Xbox 360单元可以连接到同一子网?最多16个?任何Xbox都可以像对等通信一样将数据发送到子网上的任何其他Xbox?Xbox也可以与Windows PC上的XNA通信吗?您还可以与其他设备通信吗? 那游戏服务器呢?您可以设置自己的多人游戏服务器并让Xbox与之连接并自由通信吗?您将在哪个平台上编写游戏服务器代码?Unix上的C ++?一次可以有多少Xbox单元连接到服务器?如果您无法设置自己的游戏服务器,是否有非官方的“黑客”使独立开发人员能够开发和运行游戏服务器? 由于我不是Xbox开发人员(即,我没有10000美元的devkit),所以我不能使用Coid库,例如Zoidcom。

5
XNA框架是否适合服务器端编程?
我希望创建一个基于文本的MUD,因此XNA框架的许多元素似乎都适合我的需求。尤其是诸如一般的游戏循环,网络等之类的东西。看起来XNA与具有UI和音频的交互式环境紧密耦合,因此我不确定这是否是正确的方法。 自己重新创建这些类型的方面,尝试将XNA框架适应我的需要会更容易,还是针对此类工作有更好的框架?
11 c#  xna 

3
等距碰撞检测
我在尝试检测两个等距图块的冲突时遇到了一些问题。 我尝试在图块上的每个点之间绘制线,然后检查线截距,但是这行不通(可能是由于公式错误) 经过一段时间的研究,我相信我正在考虑很多,而且必须有一种更简单的方法。 我不是在寻找代码,只是一些建议以最佳方式实现重叠检测

4
有没有允许我在Linux上用C#编写游戏的框架?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 6年前关闭。 我正在寻找类似XNA的替代产品-我不在乎它是2D还是3D引擎。这不是因为我不喜欢Windows或反Microsoft。这是因为我喜欢运行Linux,并且完全在Linux中运行代码(对于C#,我显然使用Mono),并且根本没有任何硬件可以实际支持XNA编程,仅因为我的显卡已经使用了6年。我也没有用于DirectX 10的Windows 7 / Vista CD。 因此,对于游戏开发,我有点陷入困境。但是,我非常喜欢C#,因此不愿意将其作为一种语言删除。 有什么我可以做的吗?
10 xna  c# 

1
多灯快速照明
如何实现多灯快速照明? 我不想束缚玩家,他可以放置无限数量,并且可以在关卡中重叠(点)灯。 问题在于,包含动态循环(用于计算光照)所必需的着色器往往非常慢。 我的想法是,如果有可能在编译时编译一个着色器n次,其中n是光照数量。如果在编译时知道数字n,则可以自动展开循环。是否可以仅使用不同数量的灯光来生成同一着色器的n个版本? 然后,在运行时,我可以决定将哪个着色器用于关卡的哪个部分。

4
检测“按下任何按钮”
我正在尝试允许播放器按任意按钮以从主页继续。我可以通过创建按钮列表并循环浏览这些按钮并检查其中一个按钮是否关闭来做到这一点。但是,我觉得这段代码很难看,想知道是否有一种我没有想到的简单方法? 这是我的代码现在的样子: if (GamePad.GetState(PlayerIndex.One).IsConnected) { var buttonList = new List<Buttons>() { {Buttons.A}, {Buttons.B}, {Buttons.Y}, {Buttons.X}, {Buttons.Start}, {Buttons.Back}, {Buttons.RightShoulder}, {Buttons.LeftShoulder}, {Buttons.RightTrigger}, {Buttons.LeftTrigger} }; foreach (var button in buttonList) { if (GamePad.GetState(PlayerIndex.One).IsButtonDown(button)) ExitMainMenu= true; } }
10 xna  monogame 

1
如何实现图层之间投射的2D阴影?
如何实现由不同层中的对象投射的2D阴影? 不喜欢Catalin Zima著名教程中的动态照明: 但是就像这段视频中管道的阴影一样: 就像这个视频中平台的影子和角色一样: 我想在具有多个图层和许多不同颜色的灯光的场景中使用相同类型的照明。 我可以想象通过在该图层后面的图层上绘制该图层的黑色副本,然后根据要在其上投射阴影的图层中的孔进行调整来进行此操作。但是我希望有一种更便宜的基于像素着色器的方法。

1
C#/ XNA获取硬件鼠标位置
我正在使用C#并尝试获取硬件鼠标的位置。我尝试的第一件事是简单的XNA功能,该功能易于使用 Vector2 position = new Vector2(Mouse.GetState().X, Mouse.GetState().Y); 之后,我也绘制了鼠标,并且与Windows硬件鼠标相比,带有xna提供的坐标的新鼠标“松弛了”。我的意思是,它落后了几帧。例如,如果游戏以600 fps的速度运行,则诅咒会响应,但是以60 fps的软件鼠标延迟不再可接受。因此,我尝试使用我认为是硬件鼠标的工具, [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool GetCursorPos(out POINT lpPoint); 但结果完全一样。我还尝试获取Windows窗体光标,这同样是一个死胡同-可行,但有同样的延迟。杂乱无章的xna功能: GraphicsDeviceManager.SynchronizeWithVerticalRetrace = true/false Game.IsFixedTimeStep = true/fale 确实有一些明显的原因改变了延迟时间,但是最重要的是,无论它是否仍在默认的Windows鼠标后面。我在某些游戏中看到过,它们提供了硬件加速鼠标的选项,而在其他游戏中(我认为)默认情况下已经存在。任何人都可以就如何实现这一目标提供一些指导。

6
Visual Studio 2012和游戏开发
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 5年前关闭。 好吧,我认为这是一个简单的问题,但是我很难找到一些答案。 我已经读过XNA不在Visual Studio 2012中。我最近学会了使用XNA,但是由于我想从事游戏工作,所以我想知道是否有办法在Visual Studio 2012上使用C#开发游戏。 ,还是我应该再次使用C ++和Direct3D学习一切? C#是我非常喜欢的一种语言,因此,如果没有办法用C#来实现,但是如果使用Java来进行游戏开发就非常容易,我也会对此感兴趣。 非常感谢!
10 xna  c#  3d  directx  .net 

2
XNA定期停顿
我正在尝试进行硬件实例化,但是遇到了一些奇怪的性能问题。平均帧率约为45,但非常不稳定。 开窗的 SynchronizeWithVerticalRetrace =假 IsFixedTimeStep = false PresentationInterval = PresentInterval.Immediate 下图显示了我测量的时间(带有Stopwatch)。最上面的图是在该Draw方法中花费的时间,最下面的图是从结束Draw到开始的时间。Update 尖峰几乎相隔1秒,并且总是通常时间的2、3、4或5倍。尖峰之后的帧完全没有时间。我已经检查过它不是垃圾收集器。 我目前正在实例化一个由12个三角形和36个顶点组成的网格作为三角形列表(我知道这不是最佳选择,但仅用于测试),具有100万个实例。如果我将实例化绘图调用分批处理到250个实例的小部分,则每个问题都会得到缓解,但CPU使用率会大大增加。上面的运行是每个draw调用10000个实例,在cpu上要容易得多。 如果我以全屏模式运行游戏,则几乎不存在底部图形,但是该Draw方法现在会出现相同的问题。 这是PIX内部的运行,对我来说根本没有意义。似乎有些帧没有完成渲染... 任何想法,可能是什么原因造成的? 编辑:根据要求,渲染代码的相关部分 CubeBuffer创建并初始化A ,然后填充多维数据集。如果多维数据集的数量超过某个限制,CubeBuffer则会创建一个新的,依此类推。每个缓冲区在一次调用中绘制所有实例。 仅需要一次的信息static(顶点,索引缓冲区和顶点声明;尽管到目前为止没有任何区别)。纹理为512x512 画() device.Clear(Color.DarkSlateGray); device.RasterizerState = new RasterizerState() { }; device.BlendState = new BlendState { }; device.DepthStencilState = new DepthStencilState() { DepthBufferEnable = true }; //samplerState=new SamplerState() { AddressU = TextureAddressMode.Mirror, AddressV …
10 xna  performance 

1
屏幕空间到世界空间
我正在编写一个2D游戏,其中我的游戏世界的x轴从左到右,y轴从上到下,z轴在屏幕外: 尽管我的游戏世界是自上而下的,但游戏的渲染却略有倾斜: 我正在研究从世界空间到屏幕空间的投影,反之亦然。我的前者工作如下: var viewport = new Viewport(0, 0, this.ScreenWidth, this.ScreenHeight); var screenPoint = viewport.Project(worldPoint.NegateY(), this.ProjectionMatrix, this.ViewMatrix, this.WorldMatrix); 该NegateY()扩展方法不正是它听起来像,因为XNA的Ÿ线延伸自下而上,而不是自上而下。上面的屏幕截图显示了所有工作。基本上,我在3D空间中有一堆点,然后在屏幕空间中进行渲染。我可以实时修改相机属性,并看到它动画到新位置。显然,我的实际游戏将使用精灵而不是点,并且摄影机的位置将被固定,但是我只是在尝试所有数学运算之前。 现在,我正在尝试以另一种方式转换。也就是说,给定上方屏幕空间中的x和y点,请确定世界空间中的相应点。因此,如果将光标指向绿色梯形的左下角,则希望获得世界空间读数(0,480)。该ž坐标无关。或者,当映射回世界空间时,z坐标将始终为零。本质上,我想实现此方法签名: public Vector2 ScreenPointToWorld(Vector2 point) 我已经尝试了几种方法来使它正常工作,但是没有运气。我最近的想法是,我需要调用Viewport.Unproject近两次不同/远ž值,计算得到的Ray,规范它,然后计算出的交点Ray有Plane,基本上代表了我的世界的地面。但是,我陷入了最后一步,不确定是否使事情变得过于复杂。 谁能为我指出如何实现这一目标的正确方向?
10 xna  c#  matrix  projection  screen 

2
在3D空间中绘制一条像素宽的线
我想在3D空间中画一条线,无论距相机有多远,该线始终在屏幕上始终只有一个像素宽。(单点也一样)。 关于我该怎么做的任何提示?
10 xna 

1
SharpDX是否已经成熟到可以采用,还是我现在应该立即开始使用SlimDX?
我将停止在XNA中的游戏项目,因为据我所知,它的开发即将结束(并且它已经落后于当前技术了)。因此,我需要采用新的框架或API。 我花了2天的时间研究C ++,并认为它确实不适合我-但是我确实发现对DirectX的原始访问很有吸引力。SharpDX听起来是一个不错的起点,但是它没有文档,也没有代码注释。我觉得还没准备好使用。 我对使用过这两个框架之一或两者的人们的观点感兴趣,以帮助我确定应该学习哪个框架?感谢您的任何建议。
10 xna  slimdx  sharpdx 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.