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];
}
}
但为了简单起见,当我重新启动的水平,我只是推的游戏场景再次,它不喜欢的,因为它是我不是重置所有的状态技术上还在运行。
无论如何,叠加菜单需要触摸事件的正确方法是什么?
答
所以我结束了我的游戏结束使用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;
}
...
}
一切完美,游戏过度出现在正在运行的游戏之上,并且可以得到输入。
尝试简单地将游戏添加为SKNode而不是SKScene,并将setUsserInteractionEnabled添加到YES。 –
与狗头人套件你得到pushScene和popScene方法就像在cocos2d – LearnCocos2D