我想在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 将在任一侧均被裁剪),但是我敢肯定,您会明白的。