我想在Sprite Kit中创建自己的进度栏。
我想我将需要图像-一个完全为空的进度条和填充的进度条。
我有那些图像,我将填充的图像放在空的图像之上,它们是常规的SKSPriteNodes,现在我不知道如何在需要的地方剪切填充的图像?

如何在特定点剪切SKSpriteNode图像?也许质地?

最佳答案

我建议研究SKCropNode。要获得SKCropNode的工作原理的视觉帮助,请在Apple Programming Guide中查找它。我已经多次阅读了整个文档,这是一本非常好的书。
SKCropNode本质上是一个添加到场景中的SKNode,但是其子级可以通过蒙版进行裁剪。此掩码在SKCropNode的maskNode属性中设置。这样,您只需要一个纹理图像。我会将SKCropNode子类化,以实现移动或调整 mask 大小的功能,因此您可以轻松地更新其外观。

@interface CustomProgressBar : SKCropNode

/// Set to a value between 0.0 and 1.0.
- (void) setProgress:(CGFloat) progress;

@end

@implementation CustomProgressBar

- (id)init {
  if (self = [super init]) {
    self.maskNode = [SKSpriteNode spriteNodeWithColor:[SKColor whiteColor] size:CGSizeMake(300,20)];
    SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"progressBarImage"];
    [self addChild:sprite];
  }
  return self;
}

- (void) setProgress:(CGFloat) progress {
  self.maskNode.xScale = progress;
}

@end

在您的场景中:
#import "CustomProgressBar.h"

// ...

CustomProgressBar * progressBar = [CustomProgressBar new];
[self addChild:progressBar];

// ...

[progressBar setProgress:0.3];

// ...

[progressBar setProgress:0.7];

注意:此代码不会移动蒙版(因此, Sprite 将在任一侧均被裁剪),但是我敢肯定,您会明白的。

10-07 12:41