我是iphone编程新手。我有两个碰撞的uiimageviews。但是,它们内部的图像不是正方形,因此如果一个人碰到一个角落,它会检测到两个图像之间不存在的碰撞。这是因为UIImageViews是矩形。因为我无法找到一种不碰撞的方法,如果碰到一个角落(这个建议,如果存在,会很好),我相信我应该制作两个精灵而不是uiimageviews。我没有Cocoa 2sd。我只有xcode 3.1。如何声明一个简单的精灵并检查它们之间的碰撞检测器?
答案 0 :(得分:0)
使用CoreGraphics,非透明像素上的碰撞效率很低。
你最好投资学习cocos2d和box 2d。
您可以使用工具在精灵周围创建的beizer路径,例如: physics editor
然后将它们存储在一个形状文件中,该文件保存精灵的形状。然后将它们连接到cocos2d中的精灵,并在背景中的形状上进行碰撞。您可以打开调试模式以在屏幕上查看形状。
这可以通过为形状分配位掩码来进入下一级别,并且这些开/关开关允许例如选择当某些精灵与其他精灵碰撞时会发生什么(可能会针对不同的形状碰撞对触发不同的动画和声音效果)。有一点不重要的是,尝试使用具有最少顶点数量的beizer路径来封装精灵形状非常重要,因为运行期间需要的检查越多,帧速率就越低。
简而言之,即使在cocos2d中也不适合检查非透明部件上的碰撞,因为需要检查每个像素。
答案 1 :(得分:0)
使用此方法
//对于img_view1 rect //参数是x,y,宽度,高度
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
会很棒答案 2 :(得分: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 overlappedImage是一个新图像,包含重叠的初始图像。老实说,我不知道这是否是实现这一结果的最佳方法,但我知道这绝对有效。