单游戏多重顶点纹理

本文关键字:顶点 纹理 游戏 单游戏 | 更新日期: 2023-09-27 18:10:42

我正在尝试将2D游戏转换为3D,并且在纹理方面遇到一些麻烦。整个游戏是由立方体组成的,所以我使用顶点来创建一个立方体,并从draw方法调用它。然而,我似乎只能使用基本效果用一种纹理给所有立方体上色。我假设我需要使用一些其他类型的效果,所以我可以为每个立方体选择纹理,但不确定该怎么做。任何帮助都是感激的

将使用如下所示的循环在屏幕上绘制立方体。需要为每个立方体设置不同的纹理

foreach (EffectPass pass in basicEffect.CurrentTechnique.Passes)
{
  pass.Apply();
  for (int i=0;i<mapsize;i++)
  {
      vertices = createCubeTexture(-1.0f, 0.5f);
      device.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, 2, VertexPositionTexture.VertexDeclaration);
  }
}

单游戏多重顶点纹理

这就是你的问题:

for (int i=0;i<mapsize;i++)
  {
      vertices = createCubeTexture(-1.0f, 0.5f);
      device.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, 2, VertexPositionTexture.VertexDeclaration);
  }

你循环遍历整个地图,创建一个立方体与纹理,每次你循环通过mapsize(假设是一个int)。这很棒,但问题在于该方法将为所有立方体创建相同的纹理。你需要做的是像这样:

public class Cube
{
    public Vector3 Position { get; set; }
    public Texture2D Texture { get; set; }
    public Cube(Vector3 position, Texture2D texture)
    {
        Position = position;
        Texture = texture;
    }
    public void Draw(GraphicsDevice device)
    {
        var vertices = createCubeTexture(position);
        device.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, 2, VertexPositionTexture.VertexDeclaration);
    }
}

请注意,我在相当长的一段时间内没有使用手动绘制立方体,所以我不记得这是否是确切的方式,但如果不是,它非常相似。只需循环遍历每个立方体,并调用Draw方法。

然后当你实例化立方体时,你传递一个不同的纹理,这取决于你正在创建的立方体:)