TL;DR - スプライトキットでは、while ループで for ループを使用して任意の作業を行い、while ループの次の呼び出しを遅らせて、パワーバーが途方もなく速く実行されないようにしています。スプライトキットを少し遅らせる良い方法はありますか?
こんにちは、みなさん、
大砲から発射物を発射する前に、ユーザーが大砲の出力を設定するゲームを作成しています。パワーバーを 0-100 から 100-0 に移動し、このようにループさせたいです。ユーザーがボタンをタップしている間、パワーバーが作動し、離すとすぐに、パワーバーの位置に基づいて発射体の速度を計算します。私の計画は、SKCropNode を使用して、バーの進行状況に基づいて進行状況バーの画像を表示することでした。これは、進行状況バーに次のクラスを使用するとうまく機能します。
//Progress bar Header
#import <SpriteKit/SpriteKit.h>
@interface CustomProgressBar : SKCropNode
- (void) setProgress:(CGFloat) progress;
@end
//Progress bar Implemenation
#import "CustomProgressBar.h"
@implementation CustomProgressBar
- (id)init {
if (self = [super init]) {
self.maskNode = [SKSpriteNode spriteNodeWithColor:[SKColor whiteColor] size:CGSizeMake(50,20)];
SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"progressBar.jpg"];
sprite.anchorPoint = CGPointMake(0, 0);
[self addChild:sprite];
}
return self;
}
- (void) setProgress:(CGFloat) progress {
self.maskNode.xScale = progress;
}
@end
そして、この関数を使用してパワー バーを更新します (for ループを使用してバーの更新を遅らせます)。
-(void)runPowerBar {
i = 1;
progressBar.hidden = NO;
power = 10;
while (!self.isStarted){
float prog = power * 0.00001;
multiplier = prog;
[progressBar setProgress:prog];
for(int z = 0; z < 100; z++){
// this is bad and inconsistent, need a new way
// to delay the next call of [progressBar setProgress:prog]
}
power = power + i;
if (power > 1000000) {
i = -1;
}
else if (power < 1) {
i = 1;
}
}
}
パワーバーを初期化した後、次のようにパワーバーを呼び出します。
backgroundQueue = dispatch_queue_create("com.joshnussbaum.powerBarQ", 0);
dispatch_async(backgroundQueue, ^{
[self runPowerBar];
});