【问题标题】:Why can't I add a SKScene to another SKScene?为什么我不能将 SKScene 添加到另一个 SKScene?
【发布时间】:2014-05-11 19:23:38
【问题描述】:

我正在尝试让这个 SKScene 在游戏结束时出现在场景的中间,这样之前的场景在背景中仍然可见(类似于 flappy bird 的结尾)。这是我希望它出现的图像:

到目前为止,这是我制作的代码:

在游戏场景中:

-(void)dieFrom:(SKNode*)killingDebris {
    _touched = YES;

    if (_touched == YES) {
        beatLevel = YES;
        NSLog(@"touched");

        [self runAction:[SKAction sequence:@[
            [SKAction runBlock:^{
            [_goodSquare removeFromParent];
        }],
            [SKAction runBlock:^{

            level2Achieved = [[NSUserDefaults standardUserDefaults] integerForKey:@"newLevelAchieved"];
            if (beatLevel == YES) {
                level2Achieved = 2;
            }
            [[NSUserDefaults standardUserDefaults] setInteger:level2Achieved forKey:@"newLevelAchieved"];
            [[NSUserDefaults standardUserDefaults] synchronize];
            [self removeAllChildren];
        }],
            [SKAction waitForDuration:1.5],
            [SKAction runBlock:^{

            [self endGame];

        }],
                                                   ]]];

    }
}

-(void)endGame {

    [self removeAllActions];

    gameOverScene *gameOverNode = [[gameOverScene alloc] initWithScore:self.score];
    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]];
}

在游戏结束的头文件中:

@class testScene;

@interface gameOverScene : SKScene

@property (weak, nonatomic) testScene *gameScene;

-(instancetype)initWithScore:(NSInteger)score;

@end

在游戏结束的实​​现中:

-(instancetype)initWithScore:(NSInteger)score {

    if (self = [super init]) {
        self.userInteractionEnabled = YES;
        self.zPosition = 5.0;

        SKSpriteNode *bg = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(280, 300)];
        bg.alpha = 0.6;
        [self addChild:bg];
    }
    return self;
}

但这是我在模拟器上测试时得到的结果:

带有以下错误消息:

2014-05-11 15:22:05.502 test2[2825:60b] SKScene: Setting the zPosition of a SKScene has no effect.
2014-05-11 15:22:05.503 test2[2825:60b] SKScene: Setting the position of a SKScene has no effect.
2014-05-11 15:22:05.504 test2[2825:60b] SKScene: Animating the position of a SKScene has no effect.

谁能告诉我哪里出错了,我该如何解决? 谢谢。 如果需要任何额外信息,请告诉我。

【问题讨论】:

  • 请为您的问题选择一个更好的标题。有了这个标题,很难得到好的答案。
  • 每个 SKView 只能有一个场景,iOS 上只能有一个 SKView。您需要做的是将红色方块部分设计为当前场景的叠加层(使用节点)。
  • 我为你更改了标题,因为我认为这是你被否决的唯一原因。这个问题本身似乎很好。
  • @LearnCocos2D 你能举个例子吗?
  • 你知道如何在场景中添加精灵和其他节点吗?这样做,并将它们全部放在同一个父节点中,然后添加该父节点。完成。

标签: ios objective-c sprite-kit skscene


【解决方案1】:

谁能告诉我哪里出错了,我该如何解决?

来自SKScene reference page 的概述部分:

场景是 Sprite Kit 节点 (SKNode) 树中的根节点。

由于一棵树只能有一个根,因此任何 SKNode 图都只有一个场景。

要解决此问题,请使用 SKNode(显然不是 SKScene)来包含您的游戏结束显示。然后,您可以将该节点添加到现有场景中。

【讨论】:

    【解决方案2】:

    将场景想象为应用程序的独立部分。场景因功能而异,例如您可以有主菜单场景、高分场景、游戏场景、积分场景。
    他们每个人都与其他人非常不同。场景是完整的实体,它包含您可能想要的一切。你不嵌套场景。

    你想做的事情可以用 SKNode 或 SKSpriteNode 来完成。只需创建新节点并将其添加到您的场景中。将其移动到某个较远的坐标(如 10000、10000)。

    当您想显示它时,只需将坐标更改为您需要的坐标即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-09
      • 2017-10-14
      • 1970-01-01
      相关资源
      最近更新 更多