2014-09-05 4 views
0

내 게임에서 메뉴 장면을 실행하지만 재생 버튼을 누르면 주 화면으로 전환되는 것은 회색 스크린입니다.게임 장면이 표시되지 않습니다

을 heres 내 코드 : 내가 메뉴 장면을 추가 Myscene.h

#import <SpriteKit/SpriteKit.h> 

@interface MyScene : SKScene 
@property (strong, nonatomic) SKLabelNode *scoreLabel; 
@property (nonatomic) NSInteger score; 
@property (nonatomic) BOOL gameOver; 
@property SKEmitterNode *shatter; 

typedef NS_ENUM(NSInteger, SpriteType) { 
    SpriteTypeBackground, 
    SpriteTypeSquare 
}; 

Myscene.m

#import "MyScene.h" 

@interface MyScene() 

@property SKSpriteNode *background; 
@property SKSpriteNode *square; 

@end 

@implementation MyScene 
#define kNumberOfColors  2 //Setting total number of possible colors 



-(id)initWithSize:(CGSize)size { 

    if (self = [super initWithSize:size]) { 
     /* Setup your scene here */ 
     [self runAction:[SKAction repeatActionForever: [SKAction sequence:@[[SKAction                    performSelector:@selector(addSquareAndBackground) onTarget:self] ]]]]; 

     //Score Label 
     float margin = 10; 
     self.scoreLabel = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"]; 
     self.scoreLabel.text = @"Score: 0"; 
     self.scoreLabel.fontSize = [self convertFontSize:14]; 
     self.scoreLabel.zPosition = 4; 
     self.scoreLabel.horizontalAlignmentMode = SKLabelHorizontalAlignmentModeLeft; 
     self.scoreLabel.position = CGPointMake(margin, margin); 
     [self addChild:self.scoreLabel]; 



    } 
    return self; 
} 

- (float)convertFontSize:(float)fontSize 
{ 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
     return fontSize * 2; 
    } else { 
     return fontSize; 
    } 
} 


-(void)addSquareAndBackground { 
    _background = [self createSpriteWithType:SpriteTypeBackground]; 
    _square = [self createSpriteWithType:SpriteTypeSquare]; 
} 

-(void)removeSquareAndBackground { 
    [_background removeFromParent]; 
    [_square removeFromParent]; 
} 

-(SKSpriteNode *) createSpriteWithType:(SpriteType)type { 
    // Select a color randomly 
    NSString *colorName = [self randomColorName]; 
    SKSpriteNode *sprite; 
    if (type == SpriteTypeBackground) { 
     NSString *name = [NSString stringWithFormat:@"%@Outline",colorName]; 
     sprite = [SKSpriteNode spriteNodeWithImageNamed:name]; 
     sprite.name = name; 
     sprite.size = CGSizeMake(CGRectGetHeight(self.frame), CGRectGetWidth(self.frame)); 
    } 
    else { 
     sprite = [SKSpriteNode spriteNodeWithImageNamed:colorName]; 
     sprite.name = [NSString stringWithFormat:@"%@Sprite",colorName]; 
     sprite.size = CGSizeMake(50, 50); 
    } 
    sprite.position = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMidY(self.frame)); 
    [self addChild:sprite]; 

    return sprite; 
} 

- (NSString *) randomColorName { 
    NSString *colorName; 
    switch (arc4random_uniform(kNumberOfColors)) { 
     case 0: 
      colorName = @"blue"; 
      break; 
     case 1: 
      colorName = @"pink"; 
      break; 
      // Add more colors here 
     default: 
      break; 
    } 
    return colorName; 
} 

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

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

    NSString *pinkShatterPath = [[NSBundle mainBundle] pathForResource:@"pinkShatter" ofType:@"sks"]; 
    SKEmitterNode *pinkShatter = [NSKeyedUnarchiver unarchiveObjectWithFile:pinkShatterPath]; 
    pinkShatter.particlePosition = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMidY(self.frame)); 


    if (node == _square) { 
     // Extract the color name from the node name 
     NSArray *squareNameParts = [node.name componentsSeparatedByCharactersInSet:[NSCharacterSet uppercaseLetterCharacterSet]]; 
     // Extract the color name from the node name 
     NSArray *backgroundNameParts = [_background.name componentsSeparatedByCharactersInSet:[NSCharacterSet uppercaseLetterCharacterSet]]; 
     // Compare if the colors match 
     if ([backgroundNameParts[0] isEqualToString: squareNameParts[0]]) { 
      //Add SKAction to add 1 to score label 
      [SKAction performSelector:@selector(removeSquareAndBackground) onTarget:self]; 
      [self addChild:pinkShatter]; 
      self.score += 10; 

      //NSLog(@"Score"); for console error detection 
     } else { 
      //NSLog(@"Lost"); //Add SKAction to display game-over menu 
      SKLabelNode *gameOverLabel = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"]; 
      gameOverLabel.text = @"You Lose!!!!!"; 
      gameOverLabel.fontSize = 20; 
      gameOverLabel.zPosition = 4; 
      gameOverLabel.position = CGPointMake(CGRectGetMidX(self.frame), 
               CGRectGetMidY(self.frame)); 

      [gameOverLabel setScale:0.1]; 

      [self addChild:gameOverLabel]; 
      [gameOverLabel runAction:[SKAction scaleTo:1.0 duration:0.5]]; 

      self.gameOver = YES; 
      return; 
     } 
    } 


} 

-(void)update:(CFTimeInterval)currentTime { 
    /* Called before each frame is rendered */ 
    [self.scoreLabel setText:[NSString stringWithFormat:@"Score: %ld", (long)self.score]]; 
} 

@end 

전에 내가이 일을 얻을 수가 어차피 첨가 한 후 지금은 괜찮 았는데.

답변

1

여기에서 무슨 일을하고 계십니까? 더 반복적으로 실행되지 셀렉터를

[self runAction: 
[SKAction repeatActionForever: 
    [SKAction performSelector:@selector(addSquareAndBackground) onTarget:self] 
    ]]; 

그리고 performSelector를 반복하는 원인이됩니다 : 모든 시퀀스의

[self runAction: 
[SKAction repeatActionForever: 
    [SKAction sequence:@[ 
    [SKAction performSelector:@selector(addSquareAndBackground) onTarget:self] 
    ]]]]; 

먼저 당신이 실제로 여러 작업을 시퀀싱되지 않기 때문에, 당신은 단지 하나가 완전히 불필요 지연. performSelector 액션에는 지속 시간이 없으며 즉시 실행됩니다. 영원히 반복하면 프레임마다 하나씩, 또는 SK가이를 어떻게 해석 하느냐에 따라 백그라운드 스프라이트가 만들어지며, 앱이 충돌 할 때까지 셀렉터를 무한 루프로 돌릴 수도 있습니다.

+0

감사합니다. 문제를 해결했지만 실행했을 때 여전히 게임을 볼 수 없습니다. –

관련 문제