【发布时间】:2015-12-04 16:26:08
【问题描述】:
我有一个名为 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();
受保护的覆盖 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);
}
在抽奖环节:
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);
}
【问题讨论】: