Articles of xna

发送大量的顶点到显卡

我正在编程一个我的世界克隆。 这个克隆的好处在于,整个世界都是作为一个模型来处理的。 这意味着:整个世界是由二维平面瓷砖代表,并上传到一个顶点缓冲区(因此一个drawcall) 指数被分开存储在硬盘中,因为每次游戏开始时都会产生这些指标,这有点矫枉过正。 64×64(16x16x256大块)的加载时间在3到5秒之间。 问题在于:我计算了顶点的数量:一个VertexPositionTexture的大小为20个字节。 乘以8702348(因为8702348个顶点),发送给显卡的全部数量超过160 MB! 这对显卡没有任何问题:恒定60 FPS …但我打算_实施infdev。 这意味着游戏必须经常上传超过160 MB的graphics卡:纯粹的矫枉过正。 我想避免使用每个块的顶点缓冲区,以便有一个绘制调用。 你能提出一个解决scheme吗? 谢谢。 该项目可以在https://github.com/NET-D3v3l0p3r/XChunk/tree/master/Chunkfind

雪碧旋转看向鼠标

我想弄清楚如何计算角度来旋转一个精灵在Z轴看向鼠标。 我声明了一个索引和vertexbuffer,并在其中设置了以下顶点:VertexBuffer vBuffer; IndexBuffer iBuffer; VertexPositionColor[] vertices = new VertexPositionColor[4]; short[] indices; vertices[0] = new VertexPositionColor(new Vector3(0, 0, 0) + position, Color.Blue); vertices[1] = new VertexPositionColor(new Vector3(1, 0, 0) + position, Color.Blue); vertices[2] = new VertexPositionColor(new Vector3(0, 1, 0) + position, Color.Blue); vertices[3] = new VertexPositionColor(new Vector3(1, 1, 0) + position, Color.Blue); indices = new […]

当两个列表不在同一个类中时,如何使列表中的项目符号与来自另一个列表的项目符号相交?

我有最初的“Game1”类,里面有一个“Ship”类,在“Ship”类里有一个List,其中使用了“Bullet”类。 我怎样才能在一个船舶类别列表中的子弹与另一艘船的子弹列表中的子弹相交? 我也必须为他们的点击框制作一个矩形列表吗?

二维平台碰撞检测问题 – XNA

我正在开发一个基本的2D平台游戏来学习制作游戏引擎和XNA的基础知识。 我有一个CollisionHandler类来处理玩家和地图的贴图之间的AABB冲突。 屏幕上的玩家可能会碰巧与瓷砖碰撞,但当有重力时,它会抖动(字符在重力vector像素的数量下降)。 在框架刷新之后,通过这些像素点击后,他跳回到块的上方,然后再次下降,就好像绘图发生在碰撞检测之后调整玩家的位置之前。 我已经缩小到这种可能性,因为没有重力,并且从左到右移动时,玩家停在一个街区(碰撞),但是以一定的距离穿过街区,这个距离是移动时的速度键正在被按下,当这个键被释放时,他会“回到”他应该在的位置。 这是主Game类中的Update()函数。 我已经尝试了更新播放器和CollisionHandler的不同命令。 protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); player.Update(); collisionHandler.Update(); base.Update(gameTime); } 这是我在Player类中挣扎的主要部分。 我还发现,如果玩家没有按下按键(现在按下button后没有减速),他就停在一个方块上的点上。 现在我已经在玩家的左侧进行了碰撞试验,而我将这个问题排除在外。 public void Update() { Input(); Velocity += Gravity; Pos = new Vector2(Pos.X + Velocity.X, Pos.Y + Velocity.Y); rectangle = new Rectangle(Pos.X, Pos.Y, texture.Width, texture.Height); } public void Draw(SpriteBatch […]

Monogame问题与平坦的阴影低聚地形

最近我一直在3D渲染,而且我正在使用网格上的阴影。 我用来计算所有三角形的法线的代码如下。 for (int i = 0; i < Indices.Length; i += 3) { Vector3 p1 = Vertices[Indices[i]].Position; Vector3 p2 = Vertices[Indices[i + 1]].Position; Vector3 p3 = Vertices[Indices[i + 2]].Position; Vector3 v1 = p2 – p1; Vector3 v2 = p3 – p1; Vector3 normal = Vector3.Cross(v1, v2); normal.Normalize(); Vertices[Indices[i]].Normal = normal; Vertices[Indices[i + 1]].Normal = […]

C#XNA如何计算最小距离以减速和停止点

我使用XNA在C#中构建游戏。 我目前正试图让一个角色总是前往地图的中间点(0,0,0)。 我想让角色加速到中间,然后减速到中间,所以它会停在(或者非常靠近)中间。 加速度不会改变。 速度是一个Vector3,为了这个目的,我只会担心X轴。 我正在努力的是什么时候我应该开始减速停在中间位置取决于速度和位置。 我试图尽可能简化下面的代码 在我的更新方法我基本上调用两种方法 Move(gameTime); HandleAcceleration(); Handle Acceleration非常简单 this.Transform.TranslateIncrement = this.Velocity; 移动方法 protected void Move(GameTime gameTime) { //GetDirection just returns 1 or -1 to accelerate the appropriate direction int direction = GetDirection((int)this.Transform.Translation.X); //This Is where I have trouble With GetMinDecelerationDistance() if (GetDistanceToMiddle() <= GetMinDecelerationDistance()) { //Pass in -direction to decelerate(Accelerate opposite […]

如果帧速率较低,速度改变时更新精灵位置

我有一个精灵从左到右水平移动。 对于每一次迭代,我想开始降低速度。 这工作正常,精灵将在某一点停止,但取决于帧速率,它不会总是停在同一个地方。 我的代码有什么问题? … Vector2 Position; Vector2 Speed; … Speed.X = 50; … public override void Update(GameTime theGameTime) { float time = (float) theGameTime.ElapsedGameTime.TotalSeconds; Position += Speed * time; Speed.X-=10; // Reduce speed for next iteration if ( Speed.X < 0 ) Speed.X = 0; } 我也曾经试过 Speed.X-=10 * time; 但是这并没有奏效。

MeshBuilder,程序集丢失

我正在尝试从高度图开始构建地形。 我已经对程序有了一些想法,但是我甚至无法开始。 我觉得我必须使用MeshBuider 。 问题是Visual Studio(我正在使用2008版本)想要一个程序集 。 有效地在MSDN上有一行指定MeshBuilder所需的程序集,但我不知道如何导入/加载它。 有什么建议么? 提前致谢 :)

Windows Phone 7的虚拟游戏杆(XNA)

在iOS空间中,有一个基于Cocos2D的强大库,名为SneakyInput,用于在屏幕上创建一个虚拟游戏杆。 我只是想知道是否有一个(最好是免费的)像XNA那样的库? 如果没有,有没有人可以指导我如何推出自己的资源? 这听起来不太复杂,但是当我认为“不应该那么困难”的时候,我通常会忽略更小的细节。

XNA易存储XBOX 360高分

为了跟上以前的查询 – 我需要一些帮助,实施easystorage高分,这是造成了一些错误的Xbox。 我得到提示屏幕,一个savedevice被选中,一个文件都被创建! 然而,该文件仍然是空的,(我试过预填充,但仍然有错误)。 评分代码的完整部分可以在这里find: http : //pastebin.com/74v897Yt 当前问题尤其在LoadHighScores()中 – “XML文档(0,0)中存在错误”。 在行数据=(HighScoreData)serializer.Deserialize(stream); 我不确定这一行是否正确: HighScoreData data = new HighScoreData(); 公共静态HighScoreData LoadHighScores(string容器,string文件名){HighScoreData数据=新HighScoreData(); if (Global.SaveDevice.FileExists(container, filename)) { Global.SaveDevice.Load(container, filename, stream => { File.Open(Global.fileName_options, FileMode.OpenOrCreate, FileAccess.Read); try { // Read the data from the file XmlSerializer serializer = new XmlSerializer(typeof(HighScoreData)); data = (HighScoreData)serializer.Deserialize(stream); } finally { // Close […]