1

我正在 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

出于某种原因,添加“For Each PictureBox In Me.Controls”也大大加快了该方向的移动速度。

Collison 来自一个模块,我知道碰撞是有效的,因为我在指定两个图片框时已经对其进行了测试

4

1 回答 1

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 玩家的坐标,然后 - 如果发生碰撞 - 将其坐标重置为保存的值。

您可能想阅读游戏开发中的碰撞处理,那里有很多很好的教程可以让您继续前进,并展示比我在这里介绍的更好的解决方案。

于 2013-11-04T12:40:32.547 回答