0

我是 iphone 编程新手。我有两个有碰撞的 uiimageviews。但是,它们内部的图像不是正方形,因此如果撞到角落,它会检测到两个图像之间不存在的碰撞。这是因为 UIImageViews 是矩形。由于我无法找到一种方法在碰撞到角落时不检测到碰撞(对此的建议,如果存在的话,会很好),我相信我应该制作两个精灵而不是 uiimageviews。我没有 Cocoa 2sd。我只有xcode 3.1。如何声明一个简单的精灵并检查它们之间的碰撞检测器?

4

3 回答 3

0

使用这个方法

//对于img_view1 rect //参数是x,y,width,height

CGRect image_rect1 = CGRectMake(img_view1.position.x,img_view1.position.y,100,100);

//For img_view2 rect
//parameters are x,y,width,height

CGRect image_rect2 = CGRectMake(img_view2.position.x,img_view2.position.y,100,100)

Collision detection:

    if(CGRectIntersectsRect(image_rect1, image_rect2))
    {
        NSLog(@"Collision Example");
    }

但是,如果您不想将 CGRect 用于视图,则可以简单地使用它们各自的框架属性。

-(BOOL)viewsDoCollide:(UIView *)view1 :(UIView *)view2{
    if(CGRectIntersectsRect(view1.frame, view2.frame))
    {
        return YES;
    }
    return NO;
}

但如果你使用 cocoa2d 那就太好了

于 2013-08-04T10:29:36.263 回答
0

请尝试此代码

#define imageWidth 40
#define imageHeight 60

UIImage *image1 = [UIImage imageNamed:@"firstimage.png"];
UIImage *image2 = [UIImage imageNamed: @"secondimage.png"];

CGSize itemSize = CGSizeMake(imageWidth, imageHeight);

UIGraphicsBeginImageContext(itemSize);

CGRect imageRect = CGRectMake(0.0, 0.0, itemSize.width, itemSize.height);
[image1 drawInRect:imageRect];
[image2 drawInRect:imageRect];

UIImage *overlappedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

UIImage 重叠图像是一个包含初始图像的新图像,重叠。老实说,我不知道这是否是实现此结果的最佳方法,但我知道它绝对有效。

于 2013-08-04T19:36:05.790 回答
0

使用 CoreGraphics 对非透明像素的碰撞将是低效的。

你最好投资学习 cocos2d 和 box 2d。

您将使用您使用物理编辑器等工具围绕精灵创建的贝泽路径

然后将它们存储在保存精灵形状的形状文件中。然后将它们连接到 cocos2d 中的精灵,并在背景中的形状上完成碰撞。您可以打开调试模式以查看屏幕上的形状。

这可以通过将位掩码分配给形状而进入下一个级别,并且这些开/关开关允许选择例如当某些精灵与其他精灵发生碰撞时会发生什么(可能会为不同的形状碰撞对触发不同的动画和声音效果)。不应该做的一件事是,尝试使用具有最少顶点数量的 beizer 路径将精灵形状框起来很重要,因为运行时需要的检查越多,帧速率可能会下降。

简而言之,不适合检查非透明部分的碰撞,即使在 cocos2d 中,因为需要检查每个像素。

于 2013-08-04T04:24:42.420 回答