objective-c - 不规则形状的碰撞检测

标签 objective-c cocoa-touch cocoa uiview uiimage

我已经在一个非常复杂的问题上工作了一段时间。现在,我在这里发帖,希望有人能给我解决方案的提示。

正如主题中所述,该问题与不规则形状 (UIView) 上的碰撞检测有关。

到目前为止我做了什么:

使用THIS作为起点,我创建了一个 UIImageView 子类,可以检查其框架属性上的 alpha/非 alpha 点。在我的对象的 UIPanGestureRecognizer 选择器上,我附加了一个检查来查看是否将其移动到障碍物(不是 alpha)上:

- (void)panning:(id)sender {
    UIPanGestureRecognizer = (UIPanGestureRecognizer *)sender;

    if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {
        startPoint = CGPointZero;
        oldPoint = CGPointZero;
        return;
    }
    actualPoint = [(UIPanGestureRecognizer*)sender translationInView:parentView];

    if(CGAffineTransformIsIdentity(panning)) {
        panning = CGAffineTransformMakeTranslation(actualPoint.x - startPoint.x, actualPoint.y - startPoint.y);
    } else {
        panning = CGAffineTransformTranslate(panning, actualPoint.x - startPoint.x, actualPoint.y - startPoint.y);
    }

    [self setTransform:panning];

    for(UIView *anObstacle in obstaclesArray) {
        CGRect intersection = CGRectIntersection(self.frame, anObstacle.frame);
        if([anObstacle checkAlpha:intersection] != NULL) { 
            NSLog(@"BOOOOOOOOOOOM");
        }
    }
}

除了性能之外,一切都运行良好。对于生产应用程序来说,检查速度太慢。

是否有任何我不知道的解决方法或解决方案来解决此问题?

希望能说清楚, 最好的问候

最佳答案

能否在不规则物体周围生成一个圆,以减少初始计算,然后如果与圆发生碰撞,则继续检查是否真的发生碰撞。根据在圆上检测到碰撞的位置,检查的点集可能会减少。

关于objective-c - 不规则形状的碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6561860/

相关文章:

iOS7 常量与表达式的比较始终为假

iphone - 输入带小数点的数值的最佳方法是什么?

ios - 是否可以检查某个联系人是否存在于 iPhone 的联系人列表中?

cocoa - nsbundle 捆绑路径上的警告

ios - 为什么 UIButton 消耗触摸而不是 UIControl

ios - 创建 10x10 网格并在控制台中打印它的最佳方法是什么?

ios - __NSArrayM 插入对象 :atIndex:]; object cannot be nil

ios - 创建自定义 Segue 的正确方法

cocoa - 子类化NSTextStorage中断列表编辑

MACOSX - 如何自定义 IKImageBrowserView 以在每个项目上添加 NSButton?