   XNA Firing and Storing Values in Lists
  hi again. i am a little confused with adding items to Lists. I am writing a 2D Fortress game where the user controls a turret and fires bullets at incoming Sprites. at the moment I am trying to write the Game logic for bullets, here is an outline of what I want to do.1/ Create a new bullet at the location of the barrel of the gun2/ Set the Bullet shooting off in the direction the barrel is facing(i know the rotation) seemed easier than it was for me;here is what i am trying:if(enough time has passed since you last fired){    create a new Bullet at the position of the barrel    get the rotation of the barrel and transform a vector to the currant rotation    set the bullet moving in the direction at a given speed.    !!** Add this bullet to the BulletList **!! //This is what I'm confused with}struct Bullet{ public Vector2 Pos; public Vector2 Dir; public void Update() {Pos = new Vector2(Pos.X + Dir.X, Pos.Y + Dir.Y); }}Bullet[] bullet;List<Bullet[]> Bulletlist = new List<Bullet[]>();private void FireBullet(){if (timeScinceFire > FireDelay)   {    bullet[BulletList.Count + 1].Position = //some code to get the positionbullet[BulletList.Count + 1].Direction= //Some code to get the vect & transform    BulletList.Add(bullet[BulletList.Count + 1]);   }}private void DrawBullets(){    foreach(Bullet bullet in Bulletlist)    {    bullet.Update();    spriteBatch.Draw(tBullet, bullet.Pos, Color.White)    }} However this will not work as it think it should. Problems:1/ Bullet does not Update() and move forward;2/ first bullet draws at (1,1) ALWAYS Can you guys see any problems? bullet[BulletList.Count + 1]  I don't like this bit. Im not sure why I just don't think it looks right   
  Again, from the last topic, why are you using arrays here?Bullet[] bullet;List<Bullet[]> Bulletlist = new List<Bullet[]>();Why not just a list of Bullets?List<Bullet> Bulletlist = new List<Bullet>();Your FireBullets method would then be, for example:private void FireBullet(){if (timeScinceFire > FireDelay)   {    Bullet bullet;    bullet.Position = //some code to get the positionbullet.Direction= //Some code to get the vect & transform    BulletList.Add(bullet);   }}This isn't so much an XNA question as it is a general C# question around the usage of lists.   ;Quote:Original post by Andy474 However this will not work as it think it should. Problems:1/ Bullet does not Update() and move forward;2/ first bullet draws at (1,1) ALWAYS Can you guys see any problems?1) I would suspect this is because you have a List of Array items (kind of a monster of a multi-dimensional list).  When you do the following:foreach(Bullet bullet in Bulletlist)    {    bullet.Update();...It looks like it's calling .Update() on the array, not on each array item.  I think you would need another loop going through the items of that, bah!  Just use a single list like adt7 mentions.  List<Bullet>.2) Unsure of this but it would be somewhere in this code:    bullet[BulletList.Count + 1].Position = //some code to get the positionbullet[BulletList.Count + 1].Direction= //Some code to get the vect & transformYou would need to give us the code for setting the position but all you should need to do is set Bullet.Position = new Vector2<x, y> to set it somewhere.  I would also suggest making sure to use normalized amounts otherwise you'll get some wonky speeds at different angles.   ;Quote:Original post by adt7This isn't so much an XNA question as it is a general C# question around the usage of lists.thanks :) I usually program in C++ i only started using C# a few weeks ago so I am a bit of a 'noob' you might say with Lists. I am a little sketchy with the .NET framework;i removed the List of arrays as you suggested. now I have the problem that my bullet still wont Update(); properly as the vector is always the samestruct Bullet{public Vector2 Pos;public Vector2 Dir;public void Update(){Pos = new Vector2(Pos.X + Dir.X, Pos.Y + Dir.Y);}}private void FireBullet(){if (timeScinceFire > FireDelay)    {   Bullet bullet;   bullet.Pos = new Vector2(myTurret.PosVect.X - 88, myTurret.PosVect.Y);   bullet.Dir = new Vector2(-2, 0);   myTurret.Ammo--;   Bulletlist.Add(bullet);  }}is this because of my code in Bullet::Update() or the way i am firing the bullets in FireBullet()?;  I can't see where the problem lies, although I'd personally write your update method as:this.Pos += this.Dir;The this keywords are probably redundant, they just help my thought process.You'd be better off wraping up your Pos and Dir in properties, but it's probably a better to get it working before you think about that.I wish I could help more, but I'm separated from my dev tools for the weekend so I'm unable to quickly code up something to test this.   ;  thanks for that :) looks much neater this.Pos += this.Diri cannot see why this isn't working I have run it and added a breakpoint at this point of code and it executes. so the only conclusion I can see if that this.Dir is a value of (0,0) for some reason.EDIT :: Although i wonder why i cant do thisprivate void DrawBullets(){ foreach(Bullet bullet in Bulletlist) { bullet.Pos += new Vector2(-2, 0); //Error spriteBatch.Draw(tBullet, bullet.Pos, Color.White); }}Error1Cannot modify members of 'bullet' because it is a 'foreach iteration variable';  If you've got a breakpoint on it in VS you should be able to hover over Dir and see it's value, same with Pos.   ;  aah thanks, ok so both pos, and Dir have the correct values. although i notice that bullet.Pos ALWAYS has the same value thats'd be my problem   ;  Try switching bullet to a class instead of a struct. Not ideal, but structs don't play nice with foreach loops and different solutions are needed.Edit:If that works, switch it back to a struct and try the following:for (int i = 0; i < bulletList.Count; i++) {Bullet bullet = bulletList;bullet.Update();  spriteBatch.Draw(tBullet, bullet.Pos, Color.White);  bulletList = bullet;}That is just off the top of my head, hopefully it will compile and run.   ;public class Bullet{public Vector2 Pos;public Vector2 Dir;public void Update(){this.Pos += this.Dir;}}I changed it to a class this has fixed the issue. I was just playing on my xBox and it occured to me you can edit member varibles in a foreach iteration now it works just great thanks a lot atd7   