Sprite Kit - 如何显示半个精灵/纹理/图像

3

我正在进行一个Sprite Kit项目,在其中有时需要仅显示现有图像的一半。

我尝试将精灵的框架变小,但它只会拉伸图像。

是否有可能使用蒙版或其他方式来仅显示精灵/图像/纹理的一半?


是的,这是可能的。你可以使用centerRect来实现。 - Valar Morghulis
1个回答

9
因此,为了只显示图像、纹理、精灵的一半,某人需要使用一个SKCropNode。唯一明智的做法是从一半开始裁剪所需的精灵,而不仅仅是用预定义的大小进行裁剪。这可以通过设置掩码节点位置来实现。
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))

** 将掩模位置设置为所需结果的一半(您需要骨架的一半 -> 将掩模位置设置为骨架的一半的一半)

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

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

除以4是因为你需要将遮罩的中心点不放在骨架节点的中心,而是移动到骨架的一半(提醒一下,遮罩节点使用默认的锚点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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接