stop impulse on SKSpriteKit click

…衆ロ難τιáo~ 提交于 2019-12-31 04:02:19

问题


i'm trying to create an pause button in my game. at the moment when you click on the screen it will apply an impulse on the mover spriteNode. The problem is that it still applying the impulse when i click the pause button. How can i create an pause button without creating the impulse also.

i've tried changing the if statements to an else if and then making the last impulse part the else part, but this wont work.

touchBegan method:

-(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)];
        }
    }

}

PAUSEDMENU METHOD:

-(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];

}

回答1:


Check out https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKView/Reference/Reference.html#//apple_ref/occ/instp/SKView/paused If you pause your SKView that contains the game, all the state will be truly paused and you will be able to resume it after the pause menu has been dismissed. You'll have to present the pause menu in another SKView then the one that your game is contained in.



来源:https://stackoverflow.com/questions/23504408/stop-impulse-on-skspritekit-click

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!