0

我有一个带有菜单场景、游戏场景和游戏结束场景的游戏。当我在其中一个上时,有办法不在后台运行其他人。例如,在我的游戏场景中,当您与某物接触时,它会切换到游戏结束场景。当我在菜单场景上时,播放场景运行,当它接触时,它切换到游戏结束场景。

所以我的问题是:我可以让场景不会在后台运行吗?或者有一种方法可以延迟它直到我按下菜单上的播放按钮?

这是第一个场景的代码:

    #import "WEMenuScene.h"
    #import "WEMyScene.h"

    @implementation WEMenuScene

    -(id)initWithSize:(CGSize)size {
    if (self = [super initWithSize:size]) {
    /* Setup your scene here */
    self.scaleMode = SKSceneScaleModeAspectFill;
    SKSpriteNode* background = [SKSpriteNode spriteNodeWithImageNamed:@"landscape"];
    background.position = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMidY(self.frame));
    background.zPosition = 1000;
    [self addChild:background];
    [self addChild:[self playButton]];




}
return self;
}


-(SKSpriteNode *) playButton {

SKSpriteNode* play = [SKSpriteNode spriteNodeWithImageNamed:@"Play"];
play.position = CGPointMake(CGRectGetMidX(self.frame), 300);
play.zPosition = 1200;
play.name = @"playButton";

return play;



 }


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInNode:self];
SKNode* node = [self nodeAtPoint:location];


if ([node.name isEqualToString:@"playButton"]) {
    SKScene* playScene = [[WEMyScene alloc] initWithSize:self.size];
    SKTransition* transitionPlay = [SKTransition doorsOpenVerticalWithDuration:0.5];
    [self.view presentScene:playScene transition:transitionPlay];
}

}


@end

这是第二个场景的代码:

    #import "WEMyScene.h"
    #import "WECapturedScene.h"


    @implementation WEMyScene



    -(id)initWithSize:(CGSize)size {    
    if (self = [super initWithSize:size]) {
    self.scaleMode = SKSceneScaleModeAspectFill;
    [self performSelector:@selector(logs) withObject:nil afterDelay:3.0];
    [self performSelector:@selector(moveBackground) withObject:nil afterDelay:0.0];
    [self addChild:[self createCharacter]];
    [self setUpActions];
}
return self;
}

 -(SKSpriteNode *) createCharacter {

SKSpriteNode* holly = [SKSpriteNode spriteNodeWithImageNamed:@"holly1"];
holly.position = CGPointMake(CGRectGetMidX(self.frame), 185);
holly.name = @"holly";
holly.zPosition = 40;

return holly;

}

-(void) logs {

CGPoint startPoint = CGPointMake(480, 175);

SKSpriteNode* logs = [SKSpriteNode spriteNodeWithImageNamed:@"log"];
logs.position = CGPointMake(startPoint.x, startPoint.y);
logs.name = @"logs";
logs.zPosition = 40;

[self addChild:logs];




float spawnLog = arc4random_uniform(3)+ 1.4;
[self performSelector:@selector(logs) withObject:nil afterDelay:spawnLog];




}

-(void) setUpActions {


SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:@"Holly"];

SKTexture *movetex1 = [atlas textureNamed:@"holly1"];
SKTexture *movetex2 = [atlas textureNamed:@"holly2"];
SKTexture *movetex3 = [atlas textureNamed:@"holly3"];
SKTexture *movetex4 = [atlas textureNamed:@"holly4"];
SKTexture *movetex5 = [atlas textureNamed:@"holly5"];
SKTexture *movetex6 = [atlas textureNamed:@"holly6"];
SKTexture *movetex7 = [atlas textureNamed:@"holly7"];

NSArray *atlasTexture = @[movetex1, movetex2, movetex3, movetex4, movetex5, movetex6, movetex7];

SKAction* atlasAnimation =[SKAction repeatActionForever:[SKAction animateWithTextures:atlasTexture timePerFrame:0.08]];
hollyMovement = [SKAction sequence:@[atlasAnimation]];

    SKSpriteNode* holly = (SKSpriteNode*)[self childNodeWithName:@"holly"];
    holly.zPosition = 40;
    [holly runAction:hollyMovement];

SKAction* moveUp = [SKAction moveByX:0 y:90 duration:0.50];
SKAction* wait = [SKAction moveByX:0 y:0 duration:0.4];
SKAction* moveDown = [SKAction moveByX:0 y:-90 duration:0.4];
SKAction* done = [SKAction performSelector:@selector(jumpDone) onTarget:self];
hollyUp = [SKAction sequence:@[moveUp, wait, moveDown, done]];



}

-(void) jumpDone {

isJumping = NO;


}


-(void) moveBackground {

CGPoint startPoint = CGPointMake(480, 230);

SKSpriteNode* landscape = [SKSpriteNode spriteNodeWithImageNamed:@"landscape"];
landscape.position = CGPointMake(startPoint.x, startPoint.y);
landscape.name = @"landscape";
landscape.zPosition = 1;
[self addChild:landscape];

float spawnbackground = 0.7;
[self performSelector:@selector(moveBackground) withObject:nil afterDelay:spawnbackground];



}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
/* Called when a touch begins */

if (isJumping == NO) {
    isJumping = YES;
    SKSpriteNode* holly = (SKSpriteNode*)[self childNodeWithName:@"holly"];
    [holly runAction:hollyUp];
}

}

-(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */

SKNode* holly = [self childNodeWithName:@"holly"];

[self enumerateChildNodesWithName:@"landscape" usingBlock:^(SKNode *node, BOOL *stop) {
    if (node.position.x < 0 || node.position.y < 0) {
        [node removeFromParent];
    }else {

        node.position = CGPointMake(node.position.x - 10, node.position.y);
    }
}];

[self enumerateChildNodesWithName:@"logs" usingBlock:^(SKNode *node, BOOL *stop) {
    if (node.position.x < 0 || node.position.y < 0) {
        [node removeFromParent];

    }else {

        node.position = CGPointMake(node.position.x - 10, node.position.y);
    }

    if ([holly intersectsNode:node]) {
        SKScene *capturedScene = [[WECapturedScene alloc] initWithSize:self.size];
        SKTransition* transition = [SKTransition doorsOpenVerticalWithDuration:0.5];
        [self.view presentScene:capturedScene transition:transition];
    }
}];

[self enumerateChildNodesWithName:@"dogCatcher" usingBlock:^(SKNode *node, BOOL *stop) {

        node.position = CGPointMake(node.position.x + 10, node.position.y);
}];

}

这是视图控制器:

#import "WEViewController.h"
#import "WEMyScene.h"
#import "WEMenuScene.h"

@implementation WEViewController

- (void)viewDidLoad
{
[super viewDidLoad];

// Configure the view.
SKView * skView = (SKView *)self.view;
skView.showsFPS = YES;
skView.showsNodeCount = YES;

// Create and configure the scene.
SKScene * scene = [WEMenuScene sceneWithSize:skView.bounds.size];
scene.scaleMode = SKSceneScaleModeAspectFill;

// Present the scene.
[skView presentScene:scene];
}

- (BOOL)shouldAutorotate
{
return YES;
}

- (NSUInteger)supportedInterfaceOrientations
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    return UIInterfaceOrientationMaskAllButUpsideDown;
} else {
    return UIInterfaceOrientationMaskAll;
}
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}

@end








@end
4

0 回答 0