我目前正在进行C#XNA课程,这就是他们实施项目符号的方式。他们说类会自动遍历列表(bullList)。目前这不适合我。任何人都可以给我一个关于我做错了什么的线索,或者指出一个工作版本的例子?提前谢谢
class Bullet
{
public Vector2 position;
public Vector2 velocity;
public Texture2D texture;
public float speed;
public Rectangle rectangle;
public Vector2 size = new Vector2(16, 16);
public List<Bullet> bullList = new List<Bullet>();
public enum Owner
{
PLAYER,
ENEMY
}
public Bullet()
{
Update();
}
public void Update()
{
rectangle = new Rectangle((int)position.X, (int)position.Y, (int)size.X, (int)size.Y);
position += (velocity * speed);
}
public void Draw(SpriteBatch spriteBatch, Texture2D a_texture)
{
spriteBatch.Draw(a_texture, position, Color.White);
}
public void Shoot(Vector2 a_position, Vector2 a_velocity, float a_speed, Texture2D a_texture)
{
Bullet newBullet = new Bullet();
newBullet.position = a_position;
newBullet.velocity = a_velocity;
newBullet.speed = a_speed;
newBullet.texture = a_texture;
newBullet.isAlive = true;
bullList.Add(newBullet);
}
}
答案 0 :(得分:3)
你的平局和更新功能都在&#34; main&#34;子弹的实例。相反,你需要运行foreach:
foreach (Bullet b in bullList)
{
b.rectangle = new Rectangle((int)b.position.X, (int)b.position.Y, (int)b.size.X, (int)b.size.Y);
b.position += (b.velocity * b.speed);
}
与绘制循环类似。
话虽如此,我不会这样做。子弹没有&#34;有&#34;子弹,BulletManager可能会。换句话说,你的主要&#34;子弹&#34;列出了所有&#34;实际&#34;子弹,所有的位置变量都没有被使用,并且&#34;实际的&#34;子弹有一个他们并不真正需要的子弹的列表,但他们使用所有的位置变量。听起来对我来说是两个不同对象的好例子:)。
我注意到的其他一些事情,&#34;所有者&#34; enum从未使用过,也不会使用&#34; IsAlive&#34;属性。这可能会在以后添加,但缺乏&#34; IsAlive&#34;足以引发性能问题&#34;火灾&#34;在测试中。