Mayo
Mayo

Reputation: 13

Removing Elements Programmatically in Silverlight

I am starting to learn silverlight and to practice I am doing a simple space invaders type videogame.

My issue is I am creating custom controls (bullets) programmatically like so:

if(shooting)
{
    if(currBulletRate == bulletRate)
    {
        Bullet aBullet = new Bullet();

        aBullet.X = mouse.X - 5;
        aBullet.Y = mouse.Y - Ship.Height;
        aBullet.Width = 10;
        aBullet.Height = 40;
        aBullet.Tag = "Bullet";

        LayoutRoot.Children.Add(aBullet);

        currBulletRate = 0;
    }
    else
        currBulletRate++;
}

However I am having trouble removing them once they go off bounds (leave the LayoutRoot).

I tried looping throught the LayoutRoot.Children and removing but I can't seem to get it right.

Upvotes: 0

Views: 1850

Answers (1)

Stephan
Stephan

Reputation: 5488

UIElement[] tmp = new UIElement[LayoutRoot.Children.Count];             
LayoutRoot.Children.CopyTo(tmp, 0);  

foreach (UIElement aElement in tmp)
{
    Shape aShape = aElement as Shape; 

    if (aShape != null && aShape.Tag != null)
    {

        if (aShape.Tag.ToString().Contains("Bullet"))
        {
            if (Canvas.GetTop(aShape) + aShape.ActualHeight < 0) // This checks if it leaves the top
            {
                LayoutRoot.Children.Remove(aElement);
            }
            else if(Canvas.GetTop(aShape) > Canvas.ActualHeight) // This condition checks if it leaves the bottom
            {
                LayoutRoot.Children.Remove(aElement);
            }
        }
    }
}

The code you pasted was only checking if the bullet left the top of the canvas.

Upvotes: 2

Related Questions