【问题标题】:Picturebox collide with any picture box图片框与任何图片框碰撞
【发布时间】:2013-11-05 18:01:57
【问题描述】:

我正在 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”也大大加快了该方向的移动速度。

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

【问题讨论】:

  • 您的问题到底是什么?你不是已经针对所有图片框进行测试了吗?
  • 当我将“For Each PictureBox In Me.Controls”添加到代码中时,它不再检测到任何冲突
  • 我明白了,我马上贴一些代码。

标签: vb.net collision-detection picturebox collision


【解决方案1】:

问题可能是您正在检查玩家本人,因为他也是所有图片框的一部分,因此您必须逃避这种情况:

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

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

【讨论】:

    猜你喜欢
    • 2014-10-14
    • 2023-04-03
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    相关资源
    最近更新 更多