我有一个小型的学校项目,我需要创建一个简单的游戏(平台游戏)。我一直在搞乱这个,我找到了:
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]);
或创建一个仅在玩家与组件发生碰撞时触发的事件,然后检查该组件是否为形状?
如果没有,有没有更好的方法来完成这个而不检查每个形状?
答案 0 :(得分:1)
矩形交叉是非常简单的功能,检查数百/数千个交叉点没有问题。
for i := Low(arrayShapes) to High(arrayShapes) do
if IntersectRect(Overlay, player.boundsrect, arrayShapes[i]) then
DoSomething
如果您想要更有效的方法,请考虑使用一些空间索引结构,如R-tree。它允许确定给定对象触摸哪些矩形而没有暴力