C# 如何在XNA中绘制列表中的两个纹理2D?

C# 如何在XNA中绘制列表中的两个纹理2D?,c#,xna,xna-4.0,C#,Xna,Xna 4.0,我有一个名为blockTexture的Texture2D列表,其中有2个元素 我使用下面的线来绘制第一个元素 foreach (Vector2 blockPosition in blockPositions) spriteBatch.Draw(blockTexture[0], blockPosition, Color.White); blockPosition列表用于以随机位置显示元素 我能同时画两个元素吗 如果我将blockTexture[0]更改为blockTexture[1],它将绘制

我有一个名为blockTexture的Texture2D列表,其中有2个元素

我使用下面的线来绘制第一个元素

foreach (Vector2 blockPosition in blockPositions)
 spriteBatch.Draw(blockTexture[0], blockPosition, Color.White);
blockPosition列表用于以随机位置显示元素

我能同时画两个元素吗

如果我将blockTexture[0]更改为blockTexture[1],它将绘制第二个元素。但我需要它同时画两个

我该怎么做

编辑:

Texture2D personTexture;
// The images will be drawn with this SpriteBatch
SpriteBatch spriteBatch;
// Person 
Vector2 personPosition;
const int PersonMoveSpeed = 5;

List<Vector2> blockPositions = new List<Vector2>();
float BlockSpawnProbability = 0.01f;
const int BlockFallSpeed = 2;

List<Texture2D> blockTexture = new List<Texture2D>();

Random random = new Random();
Texture2D个人文案;
//图像将使用此SpriteBatch绘制
SpriteBatch SpriteBatch;
//人
矢量2人位;
const int PersonMoveSpeed=5;
列表块位置=新列表();
浮动概率=0.01f;
常数int BlockFallSpeed=2;
List blockTexture=新列表();
随机=新随机();
受保护的覆盖void LoadContent() {

        blockTexture.Add(Content.Load<Texture2D>("Block"));
        blockTexture.Add(Content.Load<Texture2D>("right"));

        // Load textures
      // blockTexture = Content.Load<Texture2D>("Block");
       personTexture = Content.Load<Texture2D>("Person");
       //rightTexture = Content.Load<Texture2D>("Right");

        //Load the score font
        font = Content.Load<SpriteFont>("gameFont");

        // Create a sprite batch to draw those textures
        spriteBatch = new SpriteBatch(graphics.GraphicsDevice);
    }

    protected override void Update(GameTime gameTime)
    {
        // Get input
        KeyboardState keyboard = Keyboard.GetState();
        GamePadState gamePad = GamePad.GetState(PlayerIndex.One);

        // Spawn new falling blocks 
        if (random.NextDouble() < BlockSpawnProbability)
        {
            float x = (float)random.NextDouble() * (Window.ClientBounds.Width - blockTexture[0].Width);
            blockPositions.Add(new Vector2(x, -blockTexture[0].Height));
       }

        // Get the bounding rectangle of the person
        Rectangle personRectangle =
            new Rectangle((int)personPosition.X, (int)personPosition.Y,
            personTexture.Width, personTexture.Height);

        // Update each block
        personHit = false;
        for (int i = 0; i < blockPositions.Count; i++)
        {
            // Animate this block falling
            blockPositions[i] =
                new Vector2(blockPositions[i].X, blockPositions[i].Y + BlockFallSpeed);

             // Get the bounding rectangle of this block
                Rectangle sprite =
                    new Rectangle((int)blockPositions[i].X, (int)blockPositions[i].Y,
                    blockTexture[0].Width, blockTexture[0].Height);


                // check collision with person
                if (personRectangle.Intersects(sprite))
                    personHit = true;
                // Remove this block if it have fallen off the screen
                if ((blockPositions[i].Y > Window.ClientBounds.Height))
                {
                    blockPositions.RemoveAt(i);
                    // When removing a block, the next block will have the same index
                    // as the current block. Decrement i to prevent skipping a block.
                    i--;
                }
            }

            base.Update(gameTime);
        }
blockTexture.Add(Content.Load(“Block”);
blockTexture.Add(Content.Load(“右”));
//加载纹理
//blockTexture=Content.Load(“块”);
personTexture=Content.Load(“Person”);
//rightTexture=Content.Load(“右”);
//加载分数字体
font=Content.Load(“gameFont”);
//创建一个精灵批来绘制这些纹理
spriteBatch=新spriteBatch(graphics.GraphicsDevice);
}
受保护覆盖无效更新(游戏时间游戏时间)
{
//获取输入
KeyboardState键盘=keyboard.GetState();
GamePadState gamePad=gamePad.GetState(PlayerIndex.One);
//产生新的下落块
if(random.NextDouble()Window.ClientBounds.Height))
{
区块位置。移除(i);
//删除块时,下一个块将具有相同的索引
//作为当前块。减小i以防止跳过块。
我--;
}
}
更新(游戏时间);
}
在绘图部分:

foreach (Vector2 blockPosition in blockPositions)
            {
                //foreach (Texture2D blocktexture in blockTexture)
               //spriteBatch.Draw(blockTexture[1], blockPosition, Color.White);
                for (int i = 0; i < blockPositions.Count; i++ )
                {
                    spriteBatch.Draw(blockTexture[i], blockPositions[i], Color.White);


                }
foreach(块位置中的矢量2块位置)
{
//foreach(块纹理中的纹理2D块纹理)
//spriteBatch.Draw(块纹理[1],块位置,颜色.白色);
对于(int i=0;i
尝试在foreach循环中按顺序显式绘制这两个图形:

foreach (Vector2 blockPosition in blockPositions)
{
    spriteBatch.Draw(blockTexture[0], blockPosition, Color.White);
    spriteBatch.Draw(blockTexture[1], blockPosition, Color.White);
}
或者,您的意思是希望在
块位置[0]
块位置[1]
绘制
块纹理[0]
,在
块位置[1]
?在这种情况下:

for (int i = 0; i < blockPositions.Length; i++)
{
    spriteBatch.Draw(blockTexture[i], blockPositions[i], Color.White);
}
for(int i=0;i
尝试在foreach循环中按顺序显式绘制这两个图形:

foreach (Vector2 blockPosition in blockPositions)
{
    spriteBatch.Draw(blockTexture[0], blockPosition, Color.White);
    spriteBatch.Draw(blockTexture[1], blockPosition, Color.White);
}
或者,您的意思是希望在
块位置[0]
块位置[1]
绘制
块纹理[0]
,在
块位置[1]
?在这种情况下:

for (int i = 0; i < blockPositions.Length; i++)
{
    spriteBatch.Draw(blockTexture[i], blockPositions[i], Color.White);
}
for(int i=0;i
感谢您的评论,但在这种情况下,它只绘制底部的元素,即blockTexture[1].我刚刚看到你的编辑..当这个运行时,它确实工作,直到两个对象都出现在屏幕的末尾,然后新的对象开始下降,它停止运行。游戏会出现一个错误,说参数超出范围异常..你知道我如何解决这个问题吗?我必须查看更多的代码来调试这个问题。我认为发生这种情况是因为lockPositions和blockTexture的大小不一样。我写了一些代码。如果你能帮我解决这个问题,我将非常感激。我只需要这两个不同的对象落在不同的位置。这样就可以了。如果
blockTexture
blockPosition短,第二个代码块将崩溃s
。感谢您的评论,但在这种情况下,它只绘制底部的元素,即blockTexture[1].我刚刚看到你的编辑..当这个运行时,它确实工作,直到两个对象都出现在屏幕的末尾,然后新的对象开始下降,它停止运行。游戏会出现一个错误,说参数超出范围异常..你知道我如何解决这个问题吗?我必须查看更多的代码来调试这个问题。我认为发生这种情况是因为lockPositions和blockTexture的大小不一样。我写了一些代码。如果你能帮我解决这个问题,我将不胜感激。我只需要这两个不同的对象落在不同的位置。那样会更好