ios - Sprite kit - 如何显示一半的 Sprite /纹理/图像

标签 ios sprite-kit skspritenode

我正在做一个 Sprite Kit 项目,在某些情况下我只需要显示现有图像的一半。

我试着缩小 Sprite 的框架,但它只是拉伸(stretch)了图像。

有没有可能使用 mask 或其他东西来只显示一半的 Sprite /图像/纹理?

最佳答案

所以,为了只显示一半的图像、纹理、 Sprite ,有人需要使用 SKCropNode。唯一明智的做法是从一半开始裁剪您需要的 Sprite ,而不仅仅是裁剪预定义的尺寸。这可以通过设置掩码节点位置来实现。

1) 使用该纹理/图像创建一个 SkSpriteNode:

// Obj-C
SKSpriteNode *skelet = [SKSpriteNode spriteNodeWithImageNamed:imageName];

// Swift
let skelet = SKSpriteNode(imageNamed: imageName)

2) 创建 SKCropNode:

// Obj-C
SKCropNode * cropNode = [SKCropNode node];

// Swift
let cropNode = SKCropNode()

3) 创建蒙版

// Obj-C
SKSpriteNode *mask = [SKSpriteNode spriteNodeWithColor:[UIColor blackColor] size:CGSizeMake(skelet.frame.size.width/2, skelet.frame.size.height)];

// Swift
let mask = SKSpriteNode(color: .black, size: CGSize(width: skelet.frame.size.width/2, height: skelet.frame.size.height))

** 将 mask 位置设置为你需要的结果的一半(你需要骨架的一半 -> 将 mask 位置设置为“骨架的一半”的一半)

// Obj-C
mask.position = CGPointMake(skelet.frame.size.width/4, 0);

// Swift
mask.position = CGPoint(x: skelet.frame.size.width/4, y: 0)

除以 4 是因为你需要 mask 的中心不在骨架节点的中心,而是移动到骨架节点的一半(提醒 mask 节点使用默认 anchor 0.5 0.5 - 所以零点对应于骨架节点的中心)。

4) 将需要的元素添加到裁剪节点

// Obj-C
[cropNode addChild:skelet];
[cropNode setMaskNode:mask];
[self addChild:cropNode];

// Swift
cropNode.addChild(skelet)
cropNode.maskNode = mask
self.addChild(cropNode)

关于ios - Sprite kit - 如何显示一半的 Sprite /纹理/图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27636391/

相关文章:

ios - 在 binutils 中运行 objdump 时无法识别文件格式

ios - UIView 动画无法正常工作

ios - swift 2 sprite-kit 中的多行标签?

ios - iPhone 上的背景图像大小

ios - 在 indexPath 的 didselectrow 上选择取消选择行时崩溃

ios - 如何解析相同key、不同数据的JSON数据?

ios - 如何防止物理体改变 Sprite Kit 中的 x 位置

ios - 无论屏幕尺寸如何,如何在正确的位置显示 Sprite

swift - 意外发现 Nil SKSpriteNode

ios - 在 Sprite Kit 中使用 Core Graphics