Tag: xna

使背景或相机“滚动”基于字符位置

我正在开发一款具有自上而下视图的RPG游戏。 我想将一张图片加载到背景中,这是角色正在行走的内容,但到目前为止,我还没有弄清楚如何正确地重新绘制背景,以便它“滚动”。 我发现的大多数示例都是自动滚动。 我希望相机保持在角色的中心,直到您的背景图像到达其边界,然后角色将移动,而图像不会在另一个位置重新绘制。

在XNA中统一调整窗口大小

好吧,我试图让我的游戏窗口能够统一resize。 我到处检查过,但我似乎找不到任何关于它的信息。 有任何想法吗? 由于字符限制,我无法发布代码。 非常感谢有人可以帮助我,看看我做错了什么:) 同样有用的是如何在发生这种情况时调整后备缓冲区的大小,因为我不认为只有一半的精灵可以玩游戏:) void Window_ClientSizeChanged( object sender, EventArgs e ) { int new_width = graphics.GraphicsDevice.Viewport.Width; int new_height = graphics.GraphicsDevice.Viewport.Height; if (new_width != Variables.SCREEN_WIDTH) { Variables.SCREEN_HEIGHT = (int)(new_width * ascept_ratio); Variables.SCREEN_WIDTH = new_width; } if (new_height != Variables.SCREEN_HEIGHT) { Variables.SCREEN_WIDTH = (int)(new_height / ascept_ratio); Variables.SCREEN_HEIGHT = new_height; } UpdateParameters(); } … public void […]

无法修改XNA Vector组件

我有一个名为Sprite的类,ballSprite是该类的一个实例。 Sprite有一个名为Position的Vector2属性。 我正在尝试增加Vector的X组件,如下所示: ballSprite.Position.X++; 但它会导致此错误: Cannot modify the return value of ‘WindowsGame1.Sprite.Position’ because it is not a variable 是不是可以设置这样的组件? X和Y字段的工具提示显示“Get或set …”,因此我无法理解为什么这不起作用。

Kinect SDK损坏内存错误

我使用Kinect SDK在XNA中创建了一个程序。 该程序在我的电脑和许多其他电脑上运行得非常好,但在我打开这个程序的一个系统中,它给了我以下错误: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. 程序停止,它在spritebatch.End()给出了错误消息。 我无法理解为什么它给我这个错误信息。 我使用的系统有4GB Ram,而创建问题的系统有2GB RAM。 两个系统都是CORE2 Duo。 记忆是问题还是别的什么?

Box2d:最大可能的线速度?

我想我已经将Box2d配置为对任何身体都有某种最大速度,但我不确定。 我应用像(100000000, 100000000)这样的冲动,身体的移动速度与(100, 100)一样快 – 这根本不是那么快。 我正在使用Box2d XNA C#端口。 我的游戏是自上而下的2d。 以下是一些可能相关的代码: private readonly Vector2 GRAVITY = new Vector2(0, 0); public void initializePhysics(ContactReporter contactReporter) { world = new World(GRAVITY, true); IContactListener contactListener = contactReporter; world.ContactListener = contactListener; } public void Update(GameTime gameTime) { // … worldState.PhysicsWorld.Step((float)gameTime.ElapsedGameTime.TotalSeconds, 10, 10); //… } 以下是一些应用冲动的示例代码: private void ApplyImpulseFromInput() { Vector2 […]

围绕中心向量2点旋转对象

我应该在这个前言,我不是一个数学家附近。 我在另一个问题中找到的代码似乎有点工作……除了它导致我放置的对象大部分在屏幕外旋转。 这是代码: public void Update(GameTime gameTime) { Location = RotateAboutOrigin(Center, Origin, 0.01f); } public Vector2 RotateAboutOrigin(Vector2 point, Vector2 origin, float rotation) { var u = point – origin; //point relative to origin if (u == Vector2.Zero) return point; var a = (float)Math.Atan2(uY, uX); //angle relative to origin a += rotation; //rotate //u is now […]

C#XNA Visual Studio:“发布”和“调试”模式之间的区别?

我正在开发一个关于碰撞检测的演示。 ( 这里详细说明了一些代码。)在调试模式下,它工作正常。 在释放模式下,它更快,但碰撞检测真的搞砸了。 物体没有任何反弹,或者似乎被引力奇怪地轻微影响。 有些物体会爆炸,就像它们与特殊爆炸物体相撞一样,即使这些物体都不存在。 那么…… Visual Studio在Release和Debug模式之间改变了什么导致了这个问题呢? (我正在使用VS Pro 2008.) 神秘的是,发布模式一直在努力进行大量的开发。 它刚刚停止了。

XNA可以处理多少(低多边形)模型?

我知道以下是一个模糊的问题,但我遇到了我在XNA中没有预料到的性能问题。 我有一个低多边形模型(它有18个面和14个顶点)我试图绘制到屏幕a(高!)次。 我得到超过60 FPS(在一台体面的机器上),直到我画这个模型5000+次。 我在这里问得太多了吗? 我非常希望至少将这个数字加倍或加倍(10-15k)。 我实际绘制模型的代码如下。 我试图从绘制周期中尽可能多地消除计算,是否有更多可以从中挤出,或者更好的替代方案? 注意:tile.Offset在初始化期间计算一次,而不是每个周期计算一次。 foreach (var tile in Tiles) { var myModel = tile.Model; Matrix[] transforms = new Matrix[myModel.Bones.Count]; myModel.CopyAbsoluteBoneTransformsTo(transforms); foreach (ModelMesh mesh in myModel.Meshes) { foreach (BasicEffect effect in mesh.Effects) { // effect.EnableDefaultLighting(); effect.World = transforms[mesh.ParentBone.Index] * Matrix.CreateTranslation(tile.Offset); effect.View = CameraManager.ViewMatrix; effect.Projection = CameraManager.ProjectionMatrix; } mesh.Draw(); } }

优化GC语言,任何想法?

在优化方面,我是一个非常大的新手。 在我正在进行的当前游戏中,我已经设法优化了一个function并削减了大约0.5%的CPU负载,这就像我一直“非常棒”。 我的情况如下:我使用一个名为ExEn的XNA包装器库在MonoTouch中开发了一个物理重型游戏,并尝试我可能会发现很难让游戏在iPhone4上达到可玩的帧速率(不要甚至想在此时考虑iPhone3GS)。 物理计算中的性能下降几乎可以肯定,如果我将物理学从帧速率上急剧上升,如果我禁用所有内容,渲染,输入,音频,并且在物理密集的情况下让物理性能在物理上徘徊在15fps左右。 我使用Instruments来分析性能,这就是我得到的: http : //i.imgur.com/FX25h.png耗尽性能最多的函数来自物理引擎(Farseer)或ExEn XNA包装函数调用(特别是Vector2.Max,Vector2.Min)。 我查看了这些函数,我知道它可以在哪里可以通过引用将值传递给那些函数而不是值,这样就覆盖了(而且它实际上是我能想到的唯一方法。函数非常简单,本身基本上等于这样作为 return new Vector2(Max(v1.x, v2.x), Max(v1.y, v2.y)) 基本上我觉得我被卡住了,我的能力和对代码优化的理解有限,我不确定我的选择是什么,或者我是否有任何选择(也许我应该只是卷入胎位并哭?)。 随着LLVM的开启和内置版本,我最多可能获得15fps。 我确实设法通过降低物理精度来使游戏达到30fps,但是这使得许多级别在身体彼此相交并且自身崩溃时无法实现。 所以我的问题是,这是一个失败的原因还是我可以采取哪些措施来提高绩效?

XNA中基于平铺的冲突

我在XNA游戏中绘制了瓷砖并加载了我的角色。 然而,我的角色不会移动 – 地图会移动 – 这会给它带来运动的幻觉。 现在我想知道如何实际测试他们的碰撞。 我的意思是,碰撞代码在哪里,我如何使所有瓷砖代表“一件大事”?