остановить импульс на SKSpriteKit нажмите

Я пытаюсь создать кнопку паузы в своей игре. в тот момент, когда вы нажмете на экран, он применит импульс к движущемуся spriteNode. Проблема в том, что он все еще подает импульс, когда я нажимаю кнопку паузы. Как я могу создать кнопку паузы, не создавая при этом импульс.

я попытался изменить операторы if на else if, а затем сделать последнюю часть импульса частью else, но это не сработает.

Метод touchBegan:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInNode:self];
    SKNode *node = [self nodeAtPoint:location];

    //if fire button touched, bring the rain
    if ([node.name isEqualToString:@"repeat"]) {
        SKTransition *reveal = [SKTransition fadeWithDuration:2.0 ];
        MyScene *newScene = [[MyScene alloc] initWithSize: CGSizeMake(self.size.width,self.size.height)];
        //  Optionally, insert code to configure the new scene.
        [self.scene.view presentScene: newScene transition: reveal];
    }

    if ([node.name isEqualToString:@"home"]) {
        SKTransition *reveal = [SKTransition fadeWithDuration:2.0 ];
        Menu *newScene = [[Menu alloc] initWithSize: CGSizeMake(self.size.width,self.size.height)];
        //  Optionally, insert code to configure the new scene.
        [self.scene.view presentScene: newScene transition: reveal];
    }

    if ([node.name isEqualToString:@"pause"]) {
        [self pausedMenu];
    }

    if ([node.name isEqualToString:@"start"]) {
        [self startMenu];
    }

    showpipes = showpipes + 1;

    if (showpipes == 1) {
        self.physicsWorld.gravity = CGVectorMake( 0.0, -5.0 );

        SKAction* spawn = [SKAction performSelector:@selector(spawnPipes) onTarget:self];
        SKAction* delay = [SKAction waitForDuration:2.0];
        SKAction* spawnThenDelay = [SKAction sequence:@[spawn, delay]];
        SKAction* spawnThenDelayForever = [SKAction repeatActionForever:spawnThenDelay];
        [self runAction:spawnThenDelayForever]; 
    }

    started = 1;

    if (noImpulse == 1) {
        if (started == 1) {
            mover.physicsBody.restitution = 0.0;
            mover.physicsBody.velocity = CGVectorMake(0, 0);
            [mover.physicsBody applyImpulse:CGVectorMake(0, 15)];
        }
    }

}

МЕТОД ПАУЗЫ МЕНЮ:

-(void)pausedMenu
{

self.scene.paused = YES;
mover.scene.paused = YES;
[repeatButton removeFromParent];
[homeButton removeFromParent];
[menuBackground removeFromParent];
menuBackground = [SKSpriteNode spriteNodeWithColor:[SKColor colorWithWhite:0.0 alpha:0.3] size:CGSizeMake(self.frame.size.width*2, self.frame.size.height*2)];


[self addChild:menuBackground];

[pauseButton removeFromParent];

startButton = [SKSpriteNode spriteNodeWithImageNamed:@"staart"];
startButton.name = @"start";
startButton.position = CGPointMake(20, self.size.height-20);
startButton.size = CGSizeMake(40, 40);
[self addChild:startButton];



repeatButton = [SKSpriteNode spriteNodeWithImageNamed:@"repeat"];
repeatButton.name = @"repeat";
repeatButton.position = CGPointMake(self.size.width/2+30, self.size.height/2);
repeatButton.size = CGSizeMake(repeatButton.size.width/2, repeatButton.size.height/2);
[self addChild:repeatButton];

homeButton = [SKSpriteNode spriteNodeWithImageNamed:@"home"];
homeButton.name = @"home";
homeButton.position = CGPointMake(self.size.width/2-30, self.size.height/2);
homeButton.size = CGSizeMake(homeButton.size.width/2, homeButton.size.height/2);
[self addChild:homeButton];

}

person user3423384    schedule 06.05.2014    source источник
comment
Является ли узел с именем pause логикой кнопки паузы?   -  person ColdLogic    schedule 07.05.2014
comment
да, это логика кнопки паузы. поэтому, когда я нажимаю кнопку паузы, он запускает этот код. но он все равно будет запускать импульс. что не должно   -  person user3423384    schedule 07.05.2014
comment
Значит, вы не хотите, чтобы при нажатии на паузу происходило что-то еще, кроме [self pausedMenu], верно?   -  person ColdLogic    schedule 07.05.2014
comment
Создайте переменную паузы BOOL и установите ее при касании паузы. Перед подачей импульса проверьте BOOL.   -  person sangony    schedule 07.05.2014
comment
Вы можете опубликовать код для [self pausedMenu];?   -  person ZeMoon    schedule 07.05.2014
comment
Метод добавлен сейчас   -  person user3423384    schedule 07.05.2014


Ответы (1)


Ознакомьтесь с https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKView/Reference/Reference.html#//apple_ref/occ/instp/SKView/paused Если вы приостановите SKView, который содержит игру, все состояние будет действительно приостановлено, и вы сможете возобновить его после закрытия меню паузы. Вам нужно будет представить меню паузы в другом SKView, а не в том, в котором содержится ваша игра.

person Andrew Carter    schedule 06.05.2014