iphone-如何制作一个简单的精灵?

时间:2013-08-04 00:10:52

标签: iphone objective-c uiimageview collision sprite

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

3 个答案:

答案 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是一个新图像,包含重叠的初始图像。老实说,我不知道这是否是实现这一结果的最佳方法,但我知道这绝对有效。