Sprite Kit:如何在运行场景之上添加场景

Posted

技术标签:

【中文标题】Sprite Kit:如何在运行场景之上添加场景【英文标题】:Sprite Kit: How to add scene on top of running scene 【发布时间】:2014-02-15 17:22:24 【问题描述】:

所以我正在努力将我的 cocos2d 游戏移植到 Sprite Kit。

在 cocos2d 中有两种情况,我会在整个游戏场景中叠加一个菜单。第一种是暂停,第二种是游戏结束。

在 cocos2d 中我完成了游戏

CCScene *runningScene = [[CCDirector sharedDirector] runningScene];
WaveEndLayer *waveEndedLayer = [[WaveEndLayer alloc] initWithWon:didWin];
[waveEndedLayer setOpacity:0];
[runningScene addChild:waveEndedLayer z:kZHUD];
CCFadeTo *fadeIn = [CCFadeTo actionWithDuration:0.5 opacity:255];
[waveEndedLayer runAction:fadeIn];

WaveEndLayer 类上有一些 CCMenuItems,cocos2d 负责将触摸事件传递给它们的处理程序。

在 sprite kit 中做这样的事情的正确方法是什么?

我的游戏结束类应该从(SKNodeSKViewSKScene)继承什么?

我尝试使用SKScene,但你不能有 2 个正在运行的场景(或者我错了吗?),所以我将小时候的场景添加到主游戏场景中。但是触摸事件仅在主游戏场景中被调用,而不是在游戏结束场景中被调用。所以我尝试了类似的东西

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

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

    if (_gameOver)
    
        [_gameOverScene touchAtLocation:location];
    

但为了简单起见,当我重新启动关卡时,我不会重置所有内容的状态,我只是再次推动游戏场景,它不喜欢它,因为它在技术上仍在运行。

无论如何,覆盖需要触摸事件的菜单的正确方法是什么?

【问题讨论】:

尝试简单地将游戏添加为 SKNode 而不是 SKScene,并将其 setUsserInteractionEnabled 设置为 YES。 使用 kobold 工具包,您可以像 cocos2d 中一样获得 pushScene 和 popScene 方法 【参考方案1】:

所以我最终在游戏结束时使用了 SKNode。

我在其init 方法中将层作为子层添加到我的游戏场景中。

_gameOverLayer = [[GameOverLayer alloc] initWithSize:size];
_gameOverLayer.alpha = 0;
[self addChild:_gameOverLayer];

我的游戏结束方法如下所示:

- (void)gameOver

    _gameOver = YES;
    SKAction *fade = [SKAction fadeInWithDuration:0.5];
    [_gameOverLayer runAction:fade];

然后我在我的游戏场景中改变了我的触摸方法:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

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

    if (_gameOver)
    
        [_gameOverLayer touchesEnded:touches withEvent:event];
        return;
    
    ...

一切正常,游戏结束出现在正在运行的游戏之上,并且可以获得输入。

【讨论】:

以上是关于Sprite Kit:如何在运行场景之上添加场景的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Sprite Kit 中初始化所有场景?

在 Sprite Kit 场景中隐藏 iAd

如何枚举 Sprite Kit 场景中的所有节点?

在 Sprite Kit 场景中创建带有重复图像的栏 - iOS

Sprite Kit SKShapeNode 创建两个节点而不是一个

如何从 Sprite Kit 场景中引用当前的 Viewcontroller