Articles of xna

为多维数据集创建一个地图编辑器

我被告知我应该创建一个地图编辑器,而不是硬编码我的地图的所有网格。 这听起来像一个有趣的项目,从长远来看会让事情变得更容易,但我甚至不知道从哪里开始。 这将是非常简单的,3个立方体types,一个1000×1000网格,并能够堆叠立方体在彼此之上。 将地图导出到我可以在我的游戏中使用的东西将是一个问题。 同时为编辑器创建用户界面将是我完全新的东西。 有没有可以帮助这个的任何链接?

更好的方式来加载在XNA级别的内容?

目前我在XNA的主游戏类中加载了我所有的资源。 我后来想要实现的是我只加载特定资产的特定级别(游戏将包括许多级别)。 下面是我如何加载我的主要资产到主类: protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); plane = new Player(Content.Load<Texture2D>(@"Player/playerSprite"), 6, 8); plane.animation = "down"; plane.pos = new Vector2(400, 500); plane.fps = 15; Global.currentPos = plane.pos; lvl1 = new Level1(Content.Load<Texture2D>(@"Levels/bgLvl1"), Content.Load<Texture2D>(@"Levels/bgLvl1-other"), new Vector2(0, 0), new Vector2(0, -600)); CommonBullet.LoadContent(Content); CommonEnemyBullet.LoadContent(Content); } protected override void UnloadContent() { } protected override void […]

在彼此顶部绘制的立方体

在我之前的问题后面 : 限制绘制调用的数量 我已经降低了我的平局只有58帧! 但现在我有另一个问题。 我有2500个立方体都在相同的位置绘制。 我不知道为什么。 在我以前的问题所做的一切工作正常。 这是我绘制的方法,绘制我的大块。 public void Draw(BasicEffect effect, ThirdPersonCam cam) { device.SetVertexBuffer(vertexBuffer); device.Indices = indexBuffer; foreach (EffectPass pass in effect.CurrentTechnique.Passes) { no++; pass.Apply(); effect.VertexColorEnabled = false; effect.TextureEnabled = true; effect.Texture = grass; Matrix center = Matrix.CreateTranslation(new Vector3(-0.5f, -0.5f, -0.5f)); Matrix scale = Matrix.CreateScale(1f); Matrix translate = Matrix.CreateTranslation(cubePosition); effect.World = center […]

使用索引和顶点的纹理

我已经写在纸上,并试图了解如何创建每个立方体的三角形,但我无法正确地在我的立方体上绘制我的纹理。 我不知道这是我的立方体的每个面的纹理坐标,还是从我的顶点创建立方体的顺序,但是我只能看到正确的两面,其余的都是灰色的。 private void SetUpFrontFace(Vector3 cubeInChunkPosition, List<VertexPositionTexture> vertices) { vertices.Add(new VertexPositionTexture(cubeInChunkPosition + new Vector3(0, 0, 0), new Vector2(0, 1))); vertices.Add(new VertexPositionTexture(cubeInChunkPosition + new Vector3(0, 1, 0), new Vector2(0, 0))); vertices.Add(new VertexPositionTexture(cubeInChunkPosition + new Vector3(1, 1, 0), new Vector2(1, 0))); vertices.Add(new VertexPositionTexture(cubeInChunkPosition + new Vector3(1, 0, 0), new Vector2(1, 1))); } private void SetUpBackFace(Vector3 cubeInChunkPosition, List<VertexPositionTexture> […]

作为方法加载纹理

我想在我需要的时候加载纹理,所以我需要一个方法来实现。 LoadTexture(string fileName) 我只使用那个参数,但是我会在方法中放什么? 到目前为止,我只是在启动时加载了类似的内容 content.Load<Texture2D>("blah"); 但是我想从启动时加载所有内容,只在需要的时候加载内容。 编辑:为了解释我要去什么,我会给更多的细节。 说我有一大块块50x50x50。 这些大部分都不会被绘制,所以加载没有绘制的立方体的纹理是没有意义的。 这就是为什么我需要一个方法,可以在需要为多维数据集加载纹理时调用。 而不是加载6个纹理125000立方体的6面,我减less了负载量只有可见的立方体。

分开绘制调用

接下来我想在我的游戏中实现的是截锥体扑杀。 我遇到的问题是创建一个绘制方法,我可以检查我绘制的顶点缓冲区中的哪些立方体。 我想要做的是循环我的列表“立方体”,并检查立方体具有的每个边界框。 我之前做过这个,当时每个立方体都有一个单独的顶点缓冲区,但是现在当我用一大块立方体尝试它时,会使我的电脑崩溃。 我知道为什么发生这种情况,所以我不会麻烦解释它。 cubes.Add(new Cube.Grass(device, new Vector3(x, map[x, z] – y, z), grass)); cubeBoundingBox(some Vector3s here); 因此,使用这两行代码将多维数据集添加到列表中,并根据框的位置和大小创建一个边界框。 我相信有一个更好的方法来做到这一点。 public void DrawMap(GameTime gameTime) { ContainmentType CurrentContainmentType = ContainmentType.Disjoint; foreach (Cube block in cube.cubes) { CurrentContainmentType = cam.frustum.Contains(cube.cubeBoundingBox); //some more stuff here if (CurrentContainmentType != ContainmentType.Disjoint) { cube.Draw(effect); } 这是我几乎工作的旧方法。 但现在我已经将所有的多维数据集存储在一个顶点缓冲区中,这是行不通的。 我有点迷路了 我怎么能通过我的列表“立方体”中的所有立方体,以检查是否需要扑杀? 或者,制作一个边界框列表并循环这个列表会更有意义吗?

我错过了什么? (将2D鼠标转换为3D空间)

我正在制作一个有鸟瞰的networking游戏,我试图将2D鼠标坐标转换成3D空间。 现在我有一个完全平坦的网格,它打算保持完全平坦,我真正想要的只是鼠标坐标转换到这个网格。 我find了一个解决scheme,如果相机是非常直的,往下看,我认为对于我想要的就足够了,但是现在我发现,如果相机稍稍倾斜,效果会更好这与我所拥有的完全混淆了。 有人能帮我解决我失踪的问题吗? nearsourceV = GD.Viewport.Unproject(new Vector3(mouse.X, mouse.Y, 0f), camera.Projection, camera.View, camera.World); farsourceV = GD.Viewport.Unproject(new Vector3(mouse.X, mouse.Y, 1f), camera.Projection, camera.View, camera.World); mouseCoordinatesIn3D = Vector3.Normalize(farsourceV – nearsourceV); zoomMultiplier = -mouseCoordinatesIn3D.Y; zoomMultiplier = camera.CameraOffset.Y / zoomMultiplier; mouseCoordinatesIn3D = mouseCoordinatesIn3D * zoomMultiplier; mouseCoordinatesIn3D.X = mouseCoordinatesIn3D.X + camera.CameraOffset.X; mouseCoordinatesIn3D.Z = mouseCoordinatesIn3D.Z + camera.CameraOffset.Z; //Sends data and moves character […]

HLSL纹理光:只输出纹理的特定部分(新问题)

问题1 我试图创造一个聚光灯,而不是给聚光灯内的圆圈一个简单的颜色,应用纹理。 但是,纹理应该只是一个黑色圆圈: 图像 。 解决scheme:我用于纹理的位置不正确。 旧的和错误的代码: float4 TexturedSpotlightPixelShader(VertexShaderOutput input, float2 TextureCoordinate : TEXCOORD0) : COLOR0 { //I left out all the other code in the shader, full code is at the bottom of the thread color = tex2D(SpotlightTextureSampler, TextureCoordinate); } 更好的代码,解决了我的黑色问题(但创建了一个新的): float4 TexturedSpotlightPixelShader(VertexShaderOutput input) : COLOR0 { //I left out all the other code […]

旋转精灵180度

我应该先说,我已经轮stream了。 它只是我想我的广场旋转180度。 目前,它会旋转,但它会旋转,但减less每跳。 所以经过几次跳跃之后,它将会在其一侧移动。 没有太多的代码显示,但我会告诉你我是如何旋转: if (jumped) { roation += 0.1f; playerVel.Y += gravity; } 我还没有初始化任何东西的旋转。 我也尝试使用一些math函数,但我只是得到相同的结果。

围绕屏幕中心旋转

我想我的相机围绕屏幕中心旋转,我不知道如何实现这一点。 我在相机中有一个旋转,但我不知道它在旋转。 (我认为这可能是相机的位置旋转,不知道)如果你看看这两个图像: http : //imgur.com/E9qoAM7,5qzyhGD#0 http://imgur.com/E9qoAM7,5qzyhGD#1 第一个显示摄像机是如何正常的,第二个显示当我将摄像机向左或向右旋转90度时,我想如何看电平。 我的照相机: public class Camera { private Matrix transform; public Matrix Transform { get { return transform; } } private Vector2 position; public Vector2 Position { get { return position; } set { position = value; } } private float rotation; public float Rotation { get { return […]