2011-06-28 54 views
0

我有一款iPhone游戏,其中可能有30(或更多)CGRects,我需要一种快速确定用户是否触摸了它的方法。我之前一直在考虑使用下面的设置来检测用户是否触摸了Cocos2d中的CGRect,触发内部。所以我有一个向量(我用的OBJ-C++)CGRects的:如何快速判断用户是否触碰了许多CGRects

for (int i = 0; i < (int) vec_of_cgrects; i++) { 
    if (CGRectContainsPoint(vec_of_cgrects[i], location) { 
     //Do what I need to do if user touches one of the rectangles 
    } 
} 

但是这不是有效的,我想如果这最好的方式来检测用户触摸的一个特定的矩形矩形矢量或者如果有更好的方法。

+0

30真的不是一个大数字。很高兴你没有做可能涉及NSArray和NSValue的“Objective-C方法”... –

+0

@tc .:至少30 ...而且大声笑我打算使用NSMutableArray,但他们不能商店结构。然后我就像是啊!现在我开始使用C++,我学到的第一门语言...我厌倦了消息系统的东西Obj-C ... – Dair

回答

0

你想让用户触摸的每个矩形发生什么事情,或者用户触摸任何一个老的矩形时发生一个事件?

在这两种情况下你可以做出的一个改进就是通过它们的x坐标(或者y坐标,如果这更适合你的情况)对CGRects进行排序,所以只要CGRect的x坐标大于触摸的x坐标。

如果是后者,您还可以事先检查CGRect是否完全被其他CGRect包含,如果是,请将它们从数组中删除。

+0

好主意,我想把屏幕划分为四个部分,然后制作一个多暗矢量,它将相应的CGRect存储在适当的片段中,然后将我的搜索空间缩小为屏幕4个象限之一中的矩形。 – Dair

0

替代性的低效率认可ch:存储宽度*高度列表的数组。使用覆盖该像素的矩形列表填充每个列表(如果您执行某种重叠处理,则使用“顶部”矩形)。 O(1)查找!

“黑客”的方法:将屏幕分割成大小为h * h的平方,其中h〜=(宽度+高度)/ sqrt(n)。像上面那样填充每个方块。 O(sqrt(n)) - ish查找。

两者都不如基于树的方法好,但树可能会产生痛苦。

相关问题