繁体   English   中英

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

[英]iphone-How to make a simple sprite?

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

使用CoreGraphics,非透明像素上的碰撞效率会很低。

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

您可以使用通过物理编辑器等工具在精灵周围创建的beizer路径

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

通过为形状分配位掩码,可以将其带入一个新的水平,并且这些开/关开关允许例如选择当某些精灵与其他精灵碰撞时会发生什么(可能为不同的形状碰撞对触发不同的动画和声音效果)。 要注意的一件事是,重要的是尝试使用顶点数量最少的beizer路径来取消子图形的形状,因为在运行时需要检查的次数越多,帧速率就会下降。

简而言之,不适合检查非透明零件上的碰撞,即使在cocos2d中也是如此,因为需要检查每个像素。

使用这种方法

//对于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那就太好了

请尝试此代码

#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 overlaypedImage是一个新图像,其中包含重叠的初始图像。 老实说,我不知道这是否是实现此结果的最佳方法,但我知道它肯定有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM