[英]Remove objects from lists monogame
我需要幫助來刪除我創建的塊。 當所有 200 萬塊都被刪除時,我需要程序自行關閉。 我嘗試了幾件事,但我的 RemoveAt function 似乎從未按預期工作。 我究竟做錯了什么?
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
namespace projectblob_nivå1
{
class Block
{
public int X { get; set; } = 100;
public int Y { get; set; } = 100;
public Color Color { get; set; } = Color.Red;
public void Remove()
{
int i = 0;
block.RemoveAt(i);
i++;
}
public void Draw(SpriteBatch spriteBatch, Texture2D texture)
{
spriteBatch.Draw(texture, new Rectangle(X, Y, 30, 30), Color);
}
}
}
然后是Game.cs
public class Game1 : Game
{
private GraphicsDeviceManager _graphics;
private SpriteBatch _spriteBatch;
Texture2D pixelTexture;
List<Block> blocks = new List<Block>();
public Game1()
{
_graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
IsMouseVisible = true;
}
protected override void Initialize()
{
Random rnd = new Random();
// TODO: Add your initialization logic here
for (int i = 0; i < 2000; i++)
{
var block = new Block();
block.X = rnd.Next(0, 600);
block.Y = rnd.Next(0, 400);
block.Color = new Color(rnd.Next(256), rnd.Next(256), rnd.Next(256));
blocks.Add(block);
}
base.Initialize();
}
protected override void LoadContent()
{
_spriteBatch = new SpriteBatch(GraphicsDevice);
pixelTexture = Content.Load<Texture2D>("pixel");
// TODO: use this.Content to load your game content here
}
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
Exit();
foreach (Block block in blocks)
{
int i = 0;
block.RemoveAt(i);
i++;
if (i==2000)
{
Exit();
}
}
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
_spriteBatch.Begin();
foreach (Block block in blocks)
{
block.Draw(_spriteBatch, pixelTexture);
}
_spriteBatch.End();
base.Draw(gameTime);
}
}
將感謝我能得到的所有幫助:)
i 設置在 foreach 中,因此在每個循環中始終具有值 0。
foreach (Block block in blocks)
{
int i = 0;
block.RemoveAt(i);
i++;
if (i==2000)
{
Exit();
}
}
你需要這樣做
int i = 0;
foreach (Block block in blocks)
{
block.RemoveAt(i);
i++;
if (i==2000)
{
Exit();
}
}
它也應該是 blocks.RemoveAt(i) 而不是 block.RemoveAt(i)。
如果你只想清空列表,為什么不這樣做
blocks = new List<Blocks>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.