2014-02-15 5 views
1

그래서 저는 cocos2d 게임을 스프라이트 키트로 이식하는 중입니다.스프라이트 키트 : 실행 장면 상단에 장면을 추가하는 방법

cocos2d에서 나는 게임 장면 전체에 걸쳐 메뉴를 오버레이 할 2 가지 상황이있었습니다. 첫 번째 경우는 일시 중지이고 두 번째 경우는 게임 오버입니다. 게임에 대한적인 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는 핸들러에 터치 이벤트를 통과 처리.

스프 라이트 키트에서 이와 같은 작업을 수행하는 올바른 방법은 무엇입니까?

클래스를 상대로하는 게임은 (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

단순히 SKScene 대신 SKNode로 게임을 추가하고 setUsersInteractionEnabled를 YES로 설정해보십시오. –

+0

kobold kit를 사용하면 cocos2d와 같이 pushScene 및 popScene 메서드를 얻을 수 있습니다. – LearnCocos2D

답변

4

그래서 나는 내 게임을 끝내기 위해 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; 
    } 
    ... 
} 

모든 것이 완벽하게 작동, 게임 실행중인 게임의 위에 나타나고 입력을 얻을 수 있습니다.

관련 문제