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

Posted

技术标签:

【中文标题】如何在 iOS Sprite Kit 中裁剪两张图像并拼接成一张?【英文标题】:How to crop two images and splice into one in iOS Sprite Kit? 【发布时间】:2014-08-18 16:45:02 【问题描述】:

我正在 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 和上面的简单对象来做这样的事情,但我打算用更复杂的数字来做这件事。另外,我认为加载几个 .png 对我来说是不切实际的,因为我将通过所有排列进入数百个计数。我很乐意澄清任何事情 - 谢谢

【问题讨论】:

阅读 SKCropNode 类参考。 developer.apple.com/library/ios/documentation/SpriteKit/… 或者在代码中创建组合图像用作纹理... “创建组合图像”是什么意思?我有 10 种颜色要在游戏中使用,有 90 种组合(redYellow 与 yellowRed 不同),所以我不想在 photoshop 中创建所有这些图像,然后将它们添加到 Xcode,我想以编程方式进行 重要的部分是“在代码中”;)看我的回答... 【参考方案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;

【讨论】:

以上是关于如何在 iOS Sprite Kit 中裁剪两张图像并拼接成一张?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 如何在 Sprite Kit 游戏中创建音频淡入/淡出效果?

Sprite Kit iOS 中的慢动作

在 Sprite Kit iOS 中使用一个图像精灵表

iOS7 Sprite Kit如何在更改锚点时计算节点位置?

iOS 7 Sprite Kit 释放内存

iOS7 + Sprite Kit:如果我正在改变场景,如何保持一个计时器一直显示?