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

问题描述:

所以我正在将我的cocos2d游戏移植到Sprite Kit。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套件中做这样的事情的正确方法是什么?

我的班级游戏应该继承什么(SKNode,SKView,SKScene)?

我试过使用SKScene,但是你不能有2个运行的场景(或者我错了吗?),所以我把场景作为一个孩子添加到主游戏场景中。但触摸事件只在主游戏场景中被调用,而不是在场景中的游戏。所以,我想是这样

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    CGPoint location = [touch locationInNode:self]; 

    if (_gameOver) 
    { 
     [_gameOverScene touchAtLocation:location]; 
    } 
} 

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

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

+1

尝试简单地将游戏添加为SKNode而不是SKScene,并将setUsserInteractionEnabled添加到YES。 –

+0

与狗头人套件你得到pushScene和popScene方法就像在cocos2d – LearnCocos2D

所以我结束了我的游戏结束使用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; 
    } 
    ... 
} 

一切完美,游戏过度出现在正在运行的游戏之上,并且可以得到输入。