2

Я создал следующий комплект спрайт узел:SCSpriteNode неустойчивый салфетка?

SKSpriteNode *megadeth; 
megadeth = [SKSpriteNode spriteNodeWithImageNamed:@"megadeth_rocks.png"]; 
megadeth.name = @"awesome"; 

и добавил салфетки жест следующим образом:

-(void)didMoveToView:(SKView *)view{ 
    UISwipeGestureRecognizer *recognizerUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeUp:)]; 
recognizerUp.direction = UISwipeGestureRecognizerDirectionUp; 
[[self view] addGestureRecognizer:recognizerUp]; 

UISwipeGestureRecognizer *recognizerDn = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeDn:)]; 
recognizerDn.direction = UISwipeGestureRecognizerDirectionDown; 
[[self view] addGestureRecognizer:recognizerDn]; 
} 

- (void)handleSwipeUp:(UISwipeGestureRecognizer *)sender{ 

    NSLog(@"Node Swiped Up"); 
    if (sender.state == UIGestureRecognizerStateEnded) 
     { 
     CGPoint touchLocation = [sender locationInView:sender.view]; 
     touchLocation = [self convertPointFromView:touchLocation]; 
     SKSpriteNode *touchedNode = (SKSpriteNode *)[self nodeAtPoint:touchLocation]; 
     if([touchedNode.name isEqualToString:@"awesome"]){ 
     NSLog(@"Perform Action on AWESOME node"); 
     SKAction *moveUp = [SKAction moveByX:0.0 y:(0-touchedNode.position.y) duration:0.5]; 
     SKAction *fade = [SKAction fadeOutWithDuration:0.25]; 
     //SKAction *remove = [SKAction removeFromParent]; 
     SKAction *sequence = [SKAction sequence:@[moveUp, fade]]; 
     [touchedNode runAction:sequence]; 
     } 
    } 
} 

Когда я красть узел, его пролистывание, но он возвращается к его первоначальное положение, а затем исчезает.

Что я хочу, так это то, что когда я сажусь, он должен переместиться в пятно и удалить. Я что-то упустил?

+0

Вы должны использовать метод 'locationInNode:' вместо 'locationInView:' в SKScene. Тогда вам также не нужно преобразовывать точку. – ZeMoon

+0

@ZeMoon Я использую locationInNode в методе touchhesBegan. Метод gestureRecognizer обрабатывает только местоположение в поле зрения. – madLokesh

+0

Проблема заключается в '[SKAction moveByX: 0.0 y: (0-touchhedNode.position.y) duration: 0.5]' – ZeMoon

ответ

1

Вместо [SKAction moveByX:y:] я использовал [SKAction moveToY:duration:], который сделал все работают как шарм

Вот обновленный handleSwipeUp: метод:

- (void)handleSwipeUp:(UISwipeGestureRecognizer *)sender{ 

NSLog(@"Node Swiped Up"); 
//if (sender.state == UIGestureRecognizerStateEnded) 
    //{ 
    CGPoint touchLocation = [sender locationInView:sender.view]; 
    touchLocation = [self convertPointFromView:touchLocation]; 
    SKSpriteNode *touchedNode = (SKSpriteNode *)[self nodeAtPoint:touchLocation]; 
    if([touchedNode.name isEqualToString:@"awesome"]){ 
    NSLog(@"Perform Action on AWESOME node"); 
    **SKAction *moveUp = [SKAction moveToY:(touchedNode.position.y+200) duration:0.5];** 
    //SKAction *fade = [SKAction fadeOutWithDuration:0.25]; 
    SKAction *remove = [SKAction removeFromParent]; 
    SKAction *sequence = [SKAction sequence:@[moveUp, remove]]; 
    [touchedNode runAction:sequence]; 
    } 
//} 

}

Надеется, что это помогает !!!

Смежные вопросы