我不确定我的措辞是否正确" modal sprite-kit scene"但是我想要做的是在游戏完成时在场景中出现一个较小的场景。附件是截图,显示我的意思:
截图来自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;
但是节点只显示在屏幕的左下角,而不是像我想要的那样在中间显示。
我做错了什么?如何让小游戏节点弹出并位于场景中间。
答案 0 :(得分:1)
你根本做不到。根据Apple Docs和多个StackOverflow帖子,您无法同时运行两个SKScene。要重新创建所需的效果,您可以创建一个SKShapeNode
,其边框和线条颜色与您想要的相似,并将内部对象放置在里面,或者您可以为弹出的屏幕创建一个图像,只需添加{ {1}}显示高分和当前分数的场景。我附上了一张关于如何为我的应用程序平均盖伊创建结束“视图”的图片。
我使用像这样的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);