2013-03-09 119 views
3

我想做一個簡單的遊戲,我需要知道如果picturebox1(我的角色)與其他相框(牆壁)相撞。VB.NET相機之間的衝突

我已經摸索出如何做,但它只是我的性格和其他1周的PictureBox例如作品:

If picturebox1.bounds.intersectWith(picturebox2.bounds) then 
    collision = true 
end if 

我嘗試做別的事情是這樣的:

For Each PictureBox In Me.Controls 
    If PictureBox1.Bounds.IntersectsWith(PictureBox.Bounds) Then 
    collision = True 
    Else : collision = False 
    End If 
Next 

但那麼布爾碰撞總會是真的,因爲picturebox1(字符)總是與自身相交。

所以我改變了圖片框到面板和代碼看起來如下:

For Each PictureBox In Me.Controls 
    If Panel1.Bounds.IntersectsWith(PictureBox.Bounds) Then 
    collision = True 
    Else : collision = False 
    End If 
Next 

但它只能與1個圖片框,而不是與形式的所有pictureboxes。 我不明白爲什麼...... 如果有人也許知道如何在添加例外對於每個功能,所以我可以讓我的picturebox1

這樣的事情也許

For each picturebox(except(picturebox1)) in me.controls 

因爲我我找到了,但沒有找到任何東西...

任何幫助是非常感謝:) 謝謝!這樣做的

回答

1

方式一:

For Each PictureBox In Me.Controls 
    If PictureBox IsNot PictureBox1 AndAlso PictureBox1.Bounds.IntersectsWith(PictureBox.Bounds) Then 
    collision = True 
    Exit For 'Exit when at least one collision found 
    Else : collision = False 
    End If 
Next 

這將設置碰撞False如果圖片框確實PictureBox1。但是請注意,你正在覆蓋每個循環中的碰撞狀態,這並不是你真正想要的。當發現一個碰撞時,您應該退出for循環(請參閱我的代碼)。你也可以這樣改變你的代碼:

collision = False 
For Each PictureBox In Me.Controls 
    If PictureBox IsNot PictureBox1 AndAlso PictureBox1.Bounds.IntersectsWith(PictureBox.Bounds) Then 
    collision = True 
    Exit For 
    End If 
Next 
+0

謝謝一堆! :D – user2151534 2013-03-09 15:03:46

+0

@ user2151534不客氣。 – AbZy 2013-03-09 15:05:51