나는 터치를 듣고 SKAction을 스프라이트에 추가합니다. 기존 작업이 아직 완료되지 않은 경우 작업을 하나씩 실행되도록 대기열에 추가해야합니다. 경험 많은 비슷한 디자인?SKAction을 Sprite 큐에 추가합니다.
나는 Array and Block을 사용했다. 더 쉬운 접근법이 있다면?
@interface GAPMyScene()
@property(strong,nonatomic)SKSpriteNode*ufo;
@property(strong,nonatomic)NSMutableArray*animationQueue;
@property(copy,nonatomic)void(^completeMove)();
@end
@implementation GAPMyScene
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
self.ufo = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"];
self.animationQueue = [[NSMutableArray alloc] init];
__unsafe_unretained typeof(self) weakSelf = self;
self.completeMove = ^(void){
[weakSelf.ufo runAction:[SKAction sequence:[weakSelf.animationQueue copy]] completion:weakSelf.completeMove];
NSLog(@"removeing %@", weakSelf.animationQueue);
[weakSelf.animationQueue removeAllObjects];
};
[self addChild:self.ufo];
}
return self;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
for (UITouch *touch in touches) {
CGPoint location = [touch locationInNode:self];
SKAction*moveAnimation = [SKAction moveTo:location duration:2];
if (![self.ufo hasActions]) {
[self.ufo runAction:moveAnimation completion:self.completeMove];
} else {
[self.animationQueue addObject:moveAnimation];
NSLog(@"in queue %@", self.animationQueue);
}
}
}
@end
호기심에 불과합니다. Xcode에서는 '__unsafe_unretained typeof (self) weakSelf = self;'에 대한 ARC 보유 기간 경고를 보여줍니다. 그 코드가 맞습니까? –
나는 그렇게 생각한다. 블록에서 사이클을 유지하지 못하도록 약한 참조를 만들어야합니다. –
좋아요, [이 답변] (http://stackoverflow.com/a/17011096/867635)의 코드를 사용하면 경고가 사라졌습니다. 질문에 관해서 : 아직 애니메이션 대기열에 대한 더 쉬운 접근법을 찾지 못했습니다. –