怎么做这样的东西?

时间:2014-05-03 18:40:47

标签: ios iphone objective-c sprite-kit

我不确定我的措辞是否正确" modal sprite-kit scene"但是我想要做的是在游戏完成时在场景中出现一个较小的场景。附件是截图,显示我的意思:enter image description here

截图来自Flappy Bird,当玩家死亡时,小型游戏场景会像模态效果一样弹出,并显示用户的最终结果。我想知道如何创建这个。

我在游戏完成后试着调用它:

[self.player runAction:death completion:^{
        [self removeAllActions];
        GameOverNode *gameOverNode = [[GameOverNode alloc] initWithScore:self.size];
        gameOverNode.gameScene = self;
        gameOverNode.position = CGPointMake(self.scene.size.width/2, -150);
        [self addChild:gameOverNode];
        [gameOverNode runAction:[SKAction moveToY:self.scene.size.height/2 duration:0.6]];

这是gameOverScene.m文件中gameOverNode的代码:

-(id)initWithSize:(CGSize)size {
    if (self = [super initWithSize:size]) {

            self.userInteractionEnabled = YES;
            self.zPosition = 20;
            SKSpriteNode *bg = [SKSpriteNode spriteNodeWithColor:[UIColor blackColor] size:CGSizeMake(280*DoubleIfIpad, 300*DoubleIfIpad)];
            bg.alpha = 0.55;

但是节点只显示在屏幕的左下角,而不是像我想要的那样在中间显示。

我做错了什么?如何让小游戏节点弹出并位于场景中间。

1 个答案:

答案 0 :(得分:1)

你根本做不到。根据Apple Docs和多个StackOverflow帖子,您无法同时运行两个SKScene。要重新创建所需的效果,您可以创建一个SKShapeNode,其边框和线条颜色与您想要的相似,并将内部对象放置在里面,或者您可以为弹出的屏幕创建一个图像,只需添加{ {1}}显示高分和当前分数的场景。我附上了一张关于如何为我的应用程序平均盖伊创建结束“视图”的图片。

end screen

我使用像这样的SKShapeNode制作了弹出屏幕:

SKLabelNode

当然,不要介意繁忙的CGRect实现,我想让一切都相对适合所有屏幕尺寸,所以我没有硬编码任何位置。至于添加分数和按钮,我这样做了:

SKShapeNode *optionsMenu = [SKShapeNode node];

CGRect    tempRect = CGRectMake(SELF_WIDTH/2, SELF_HEIGHT/2, SELF_WIDTH-20, (finalScoreLabel.position.y+(finalScoreLabel.frame.size.height/2)) - (mainMenuButton.position.y-(mainMenuButton.frame.size.height/2)) + 20);
CGPathRef tempPath = CGPathCreateWithRoundedRect(CGRectMake(tempRect.origin.x - tempRect.size.width/2, tempRect.origin.y - tempRect.size.height/2, tempRect.size.width, tempRect.size.height), 5, 5, Nil);

optionsMenu.path        = tempPath;
optionsMenu.fillColor   = [SKColor grayColor];
optionsMenu.strokeColor = [SKColor blueColor];
optionsMenu.zPosition   = 30;
optionsMenu.glowWidth   = 2.0f;

CGPathRelease(tempPath);