我一直在忙着开发游戏,而且我遇到了一个我觉得困难的部分。对于如何做到这一点,我可能完全错了。
我所拥有的是我的主板上的几张图像。它们是我拖入它们(瓦片)的对象的持有者。 (我再次不知道这是否是最佳或正确的方法。)
例如,我制作了一张图片来显示我的意思:
在这张图片中,我有一张图像(A),我想将其拖到顶部图块中的一个上,我的代码必须自动检测(A)最位于哪个图像视图并将其放入该视图中。
我真的被困在这里,我想了解一些关于如何做到这一点或其他方式的信息。
A已经可以拖动了。
答案 0 :(得分:2)
您可以使用bool CGRectIntersectsRect (CGRect rectA,CGRect rect1);
(rect1或rect2或3或4)
检查'A'的框架与四个顶部瓷砖中的任何一个的交叉点。
在交叉点之后,您可以检查每个图块的中心与“A”的中心之间的最小距离,以检查哪个图块包含A的大部分。(所有UIView
具有center
属性)< / p>
这假设所有图块和A都是单独的视图。
或者第二个想法,您可以检查中心之间保持最小距离的最小距离,然后完全避开第一步。
CGFloat xDist = (p2.x - p1.x);
CGFloat yDist = (p2.y - p1.y);
CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist));
答案 1 :(得分:1)
为你的手势制作属性:
@property (nonatomic, strong) UILongPressGestureRecognizer *longPress;
初始化它:
self.longPress = [UILongPressGestureRecognizer initWithTarget:self action:@selector(gestureRecognizedStateDidChanged:)];
self.longPress.minimumPressDuration = 0.03;
您的视图控制器类应实现<UIGestureRecognizerDelegate>
协议:
self.longPress.delegate = self;
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)sender {
return CGRectContainsPoint(self.targetImage.frame, [sender locationInView:self.view]);
}
- (void)gestureRecognizedStateDidChanged:(UILongPressGestureRecognizer *)sender {
switch (recognizer.state) {
case UIGestureRecognizerStatePossible:
case UIGestureRecognizerStateBegan: {
// did started, you can pick up your view
self.targerImageView.center = [sender locationInView:self.view];
break;
}
case UIGestureRecognizerStateFailed:
case UIGestureRecognizerStateCancelled:
case UIGestureRecognizerStateEnded: {
// drop callback, bring you view home or to target
if (CGRectContainsPoint(self.toDropImageViews.frame, [sender locationInView:self.view]) {
// do you drop code here
}
break;
}
case UIGestureRecognizerStateChanged: {
self.targerImageView.center = [sender locationInView:self.view];
// moving callback
break;
}
}