代码之家  ›  专栏  ›  技术社区  ›  Ell

碰撞检测代码应该在哪里?

  •  1
  • Ell  · 技术社区  · 14 年前

    3 回复  |  直到 13 年前
        1
  •  3
  •   Andrew Grimm atk    14 年前

    碰撞检测不应该在您的球类中进行,因为它需要了解游戏中的所有其他对象。

    想象一个有很多物体的射手,想想如果每个物体都试图自己计算碰撞会发生什么。

    玩得高兴。。。:)

        2
  •  2
  •   electromaggot    14 年前

    像你描述的那样上球类确实是个好主意。这样你就可以复制它,就像在一些“突破”游戏中一样,如果你想产生两个或更多的球——或者如果你想在另一个游戏中重用这些代码。你也可以有一个具有类似X,Y坐标的桨类(或者如果球和桨都来自一个“ScreenObject”类,如果它们共享许多类似的成员)。拨片可以读取共享变量,该变量由接收用户输入的线程/事件更新。

    在Ball类中,可以基于全局可访问的值(如屏幕尺寸范围)进行简单的碰撞,例如与墙的碰撞。当特定的墙被击中时,更新程序可以简单地反转一个速度分量。可以在Ball类中定义和设置委托/回调,以便在球反弹时播放声音。同样,拨片的更新可以检查屏幕大小,这样你就不能将拨片移出屏幕。

    对于有很多物体的游戏,你不想综合检测每一个,只是最近的一个。在这种情况下,“管理器”变得更像一个“场景管理器”,它在X和Y方向上保持对象的链接列表。当对象经过其他对象时,它们交换列表中的指针,因此列表始终保持排序。这样,对于任何一个给定的对象,我们都可以立即知道左/右/上/下的对象,所以我们只需要对这些对象进行碰撞检查。。。节省大量时间,使游戏以最大速度运行。不过,也许你还没到这一步!

        3
  •  1
  •   vurte    14 年前

    对于pong,简单的矩阵运算就足够了。如果只有一个ball类,并且只用于保存元组,则不需要它。