如何在iOS Sprite Kit中裁剪两个图像并拼接成一个?

时间:2014-08-18 16:45:02

标签: ios objective-c png sprite-kit crop

我正在使用Xcode的Sprite工具包为AppStore开发游戏。我有一些单一颜色的形状,我想“拼接”在一起,并让用户能够拖放这个拼接的图像,就像他们使用单一颜色的形状。

更详细:我有以下两张图片: http://s1381.photobucket.com/user/shahmeen/media/CircleYellow_zps11feede7.png.html http://s1381.photobucket.com/user/shahmeen/media/CircleRed_zps49eb1802.png.html

SKSpriteNode *spriteA;
spriteA = [SKSpriteNode spriteNodeWithImageNamed:@"CircleYellow"];
[self addChild:spriteA];
SKSpriteNode *spriteB;
spriteB = [SKSpriteNode spriteNodeWithImageNamed:@"CircleRed"];
[self addChild:spriteB];

我想有第三个精灵,看起来就像下面一样(请原谅我粗糙的Photoshop技能......如果链接不起作用,我想创建的是一个图像,spriteC,带有左半部分是spriteA的左半部分,右半部分是spriteB的右半部分: http://s1381.photobucket.com/user/shahmeen/media/CircleRed_zps9ca710cb.png.html

(some code that crops spriteA and spriteB and then)
SKSpriteNode *spriteC;
spriteC = (the output of spriteA and spriteB cropped and spliced together);
[self addChild:spriteC];

我知道我可以使用上面描述的对象的简单性使用SKShapeNodes做这样的事情,但我打算用更复杂的数字来做这件事。另外我认为加载几个.pngs对我来说是不切实际的,因为我将使用所有排列进入数百个计数。我很乐意澄清任何事情 - 谢谢

1 个答案:

答案 0 :(得分:1)

我将通过代码创建两个图像的最终组合,并使SKSpriteNode将此组合图像用作纹理。你可以这样做,假设两个图像&最后一个具有相同的大小:

- (UIImage*)combineImage:(UIImage*)leftImage withImage:(UIImage*)rightImage{
    CGSize finalImageSize = leftImage.size;
    CGFloat scale = leftImage.scale;

    UIGraphicsBeginImageContextWithOptions(finalImageSize, NO, scale);
    CGContextRef context = UIGraphicsGetCurrentContext();

    [leftImage drawAtPoint:CGPointZero];
    CGContextClipToRect(context, CGRectMake(finalImageSize.width/2, 0, finalImageSize.width/2, finalImageSize.height)); //use clipToMask with a maskImage if you have some more complicated images
    [rightImage drawAtPoint:CGPointZero];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}