如何检查同一类的所有组件是否发生冲突?

时间:2017-02-07 17:21:33

标签: delphi

我有一个小型的学校项目,我需要创建一个简单的游戏(平台游戏)。我一直在搞乱这个,我找到了:

Var
 Overlay : Trect;
Begin
 If not intersectrect(Overlay, player.boundsrect, shape1.boundsrect) then
  //code
end;

这将检查播放器是否与shape1发生碰撞并防止掉落到形状之外。 我的问题是我在运行时在数组中创建形状。我无法检查每个形状的碰撞情况,特别是如果有很多形状,并且每次计时器滴答都会多次检查有问题。

我能以某种方式做这样的事情:

If not intersectrect(Overlay, player.boundsrect, arrayShapes[1..20]);

或创建一个仅在玩家与组件发生碰撞时触发的事件,然后检查该组件是否为形状?

如果没有,有没有更好的方法来完成这个而不检查每个形状?

1 个答案:

答案 0 :(得分:1)

矩形交叉是非常简单的功能,检查数百/数千个交叉点没有问题。

for i := Low(arrayShapes) to High(arrayShapes) do
  if IntersectRect(Overlay, player.boundsrect, arrayShapes[i]) then
      DoSomething

如果您想要更有效的方法,请考虑使用一些空间索引结构,如R-tree。它允许确定给定对象触摸哪些矩形而没有暴力