我已经在一个非常复杂的问题上工作了一段时间。现在,我在这里发帖,希望有人能给我解决方案的提示。
正如主题中所述,该问题与不规则形状 (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/