如何在 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 游戏中创建音频淡入/淡出效果?