首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >游戏场景不显示

游戏场景不显示
EN

Stack Overflow用户
提问于 2014-09-05 17:35:43
回答 1查看 77关注 0票数 0

我的游戏运行菜单场景,但当我按下play按钮时,它会转换到主场景,我所能看到的只有一个灰色屏幕。

下面是我的代码: Myscene.h

代码语言:javascript
复制
#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

代码语言:javascript
复制
    #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

在我添加菜单场景之前,它现在工作得很好,在添加之后,我似乎不能让它工作。

EN

回答 1

Stack Overflow用户

发布于 2014-09-05 18:07:52

你知道你在这里做什么吗?

代码语言:javascript
复制
[self runAction:
 [SKAction repeatActionForever:
  [SKAction sequence:@[
   [SKAction performSelector:@selector(addSquareAndBackground) onTarget:self]
  ]]]];

首先,这个序列是完全多余的,因为你实际上没有对多个动作进行排序,你只有一个动作:

代码语言:javascript
复制
[self runAction:
 [SKAction repeatActionForever:
   [SKAction performSelector:@selector(addSquareAndBackground) onTarget:self]
  ]];

并且重复performSelector将导致选择器毫无延迟地重复运行。performSelector操作没有持续时间,它会立即运行。永远重复它将创建背景精灵,要么是每帧一个,要么取决于SK对此的解释,甚至可能会在应用程序崩溃之前无限循环地运行选择器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25682824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档