每个获取所有图片框

时间:2017-12-01 23:59:26

标签: vb.net

构建一个太空入侵者游戏框架,并在屏幕上显示每个子弹时遇到一些问题。

使用以下内容定义/创建项目符号:

Dim Bullet As PictureBox

Bullet = New PictureBox() 

Controls.Add(Bullet)

For Each Bullet As Control In Me.Controls
    If TypeOf Bullet Is PictureBox Then
        If Bullet.Visible = True Then
            BulletTimer.Enabled = True
            Bullet.Top = Bullet.Top - 10
        End If
    End If
Next

我遇到的问题是,它会在屏幕上显示每个图片框,包括玩家和敌人,然后向上飞行而不仅仅是子弹。

1 个答案:

答案 0 :(得分:0)

您可以使用每个控件中的Tag property。将PictureBox的Tag属性设置为将PictureBox标识为项目符号的内容。例如,您可以将其设置为字符串" BULLET"。
然后你的循环检查PictureBox是否设置了Tag,以及Tag属性是否具有值" BULLET"

For Each Bullet As PictureBox In Me.Controls.OfType(Of PictureBox)
   If Bullet.Tag IsNot Nothing AndAlso Bullet.Tag.ToString = "BULLET" Then
       If Bullet.Visible = True Then
            BulletTimer.Enabled = True
            Bullet.Top = Bullet.Top - 10
        End If
    End If
Next

...

{{1}}

请注意,您可以使用OfType(T)扩展来简化循环,以仅从控件集合中检索PictureBox。这样就不需要检查控件是否是PictureBox。