2013-11-04 30 views
1

我在vb.net製作遊戲,我需要告訴角色是否與任何圖片框發生衝突,當我在代碼中添加「For Each PictureBox In Me.Controls」代碼時「T檢測到任何碰撞了 下面的代碼:Picturebox與任何圖片框相撞

For Each PictureBox In Me.Controls 
    If Not Collision(picBox1, PictureBox) Then 
     walk = 1 
     tmrWalk.Start() 
     picBox1.Top -= 5 
    End If 
Next 

出於某種原因,加上‘對於每一個圖片框在Me.Controls’也極大地朝着這個方向加快移動速度。

科裏森是一個模塊,我知道,碰撞工作,因爲我已經測試過它,而同時指定pictureboxes

+0

你的問題到底是什麼?你不是在測試所有picutre盒子嗎? – Eisenhorn

+0

當我在代碼中添加「For Each PictureBox In Me.Controls」時,它不再檢測到任何衝突 –

+0

我看到了,我會在一秒鐘後發佈一些代碼。 – Eisenhorn

回答

0

的問題可能是你正在檢查,對球員本人,因爲他是所有部分圖片框藏漢,所以你必須要逃避這種情況下:所以,現在如果發生碰撞

Dim colliding as Boolean = false 
For Each pb as PictureBox In Me.Controls 
    ' Dont test against the player 
    If Not pb is picBox1 
     ' Check for collision 
     If Collision(picBox1, PictureBox) Then 
      ' Player is colliding - dont walk! 
      colliding = true 
     End If 
    End If 
Next 

If Not colliding Then 
    walk = 1 
    tmrWalk.Start() 
    picBox1.Top -= 5 
End If 

,我們持續跟蹤,並且只允許移動,如果沒有發生碰撞的。

編輯 通常情況下,您應該在移動前測試碰撞情況,以便在您知道不會發生碰撞時實際上只移動角色。

如果您決定在移動後處理碰撞,您將在移動之前緩存yoru播放器的座標,然後 - 如果發生碰撞 - 將其座標重置爲保存的值。

您可能想了解遊戲開發中的碰撞處理,這裏有很多很好的教程可以幫助您解決問題,並且還可以展示比我在這裏介紹的更好的解決方案。