构建一个太空入侵者游戏框架,并在屏幕上显示每个子弹时遇到一些问题。
使用以下内容定义/创建项目符号:
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
我遇到的问题是,它会在屏幕上显示每个图片框,包括玩家和敌人,然后向上飞行而不仅仅是子弹。
答案 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。