Picturebox与任何图片框冲突

时间:2013-11-04 10:41:33

标签: vb.net collision-detection picturebox collision

我正在vb.net中制作游戏,我需要判断角色是否与任何图片框发生碰撞,当我在代码中添加“For Each PictureBox In Me.Controls”时,它不再检测到任何碰撞 这是代码:

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

由于某种原因,在Me.Controls中添加“For Each PictureBox”也大大加快了这个方向的移动速度。

Collison来自一个模块,我知道碰撞是有效的,因为我在指定两个图片框的同时测试了它

1 个答案:

答案 0 :(得分: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播放器的坐标,然后 - 如果发生碰撞 - 将其坐标重置为保存的值。

你可能想要阅读游戏开发中的碰撞处理,有很多很好的教程可以帮助你,并且展示出比我在这里提出的更好的解决方案。