2017-12-01 10 views
1

スペースインベーダーのゲームフレームワークを構築し、各弾丸をスクリーンに表示する際に問題が発生する。すべての画像ボックスを取得するため

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

あなたはC#に詳しいと言いました。あなたはC#でコードを書くだけで、VB.Netと同等のものを得るためにオンラインコンバータの1つを使うことができます。 – Blackwood

答えて

0

すべてのコントロールにはTag propertyを使用できます。 PictureBoxのTagプロパティを、ピクチャボックスを箇条書きとして識別するものに設定します。例えば、文字列 "BULLET"に設定することができます。
次に、あなたのループチェックのPictureBoxが設定され、タグを持っている場合と、Tagプロパティの値が「BULLET」

Dim Bullet As PictureBox 
Bullet = New PictureBox() 
Bullet.Tag = "BULLET" 
Controls.Add(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 

お知らせControlsコレクションからPictureBoxのみを取得するOfType(T)拡張。これにより、コントロールがPictureBoxであるかどうかを確認する必要がなくなります。

+0

これはまさに私が探していたものです、大変感謝しています! – Matt

関連する問題