2012-01-23 69 views
1

是否可以檢測到現場顯示哪個CCScene?我在我的比賽中有2個CCScenes,並且我想要一個特定的動作發生。(Cocos2D)檢測哪個CCScene正在顯示?

也很快相關的問題,如果我想檢查是否CCMenu是顯示的是我會做類似

if (!menu) { 
    //Menu is not showing currently 
    } 

我有點小白,當談到的Cocos2D如此請原諒我:)

謝謝!

回答

3

可以使用CCDirector知道哪些場景運行。

[[CCDirector sharedDirector] runningScene]; 

至於菜單是否顯示。你將不得不與菜單的父母進行覈對。如果家長在您CCLayer,那麼你可以通過

// assume menu is set up to have tag kMenuTag 
CCMenu * menu = [self getChildByTag:kMenuTag]; 

檢查菜單是其他一些節點的孩子,你可以通過類似的方法得到了家長,並獲得了菜單的參考。

如果menu == nil,則不顯示。

UPDATE

在cocos2d,你是從保持引用到所有精靈氣餒,相反,你應該給每個節點的唯一標籤,並用它來引用它。要實現你的第一個目標,你可以在你的2個CCLayer類中爲你的場景添加一個標籤。

你可以設置你的獨特標籤中的一個名爲Tags.h文件枚舉,然後導入到需要將自己的代碼訪問的任何類

例Tags.h

enum { 
    kScene1Tag = 0, 
    kScene2Tag = 1, 
    kMenuTag = 2}; 

然後在層類

+(id) scene 
{ 
    // 'scene' is an autorelease object. 
    CCScene *scene = [CCScene node]; 
    scene.tag = kScene1Tag; 
    // 'layer' is an autorelease object. 
    HelloWorld *layer = [HelloWorld node]; 

    // add layer as a child to scene 
    [scene addChild: layer]; 

    // return the scene 
    return scene; 
} 

現在,當你抓住當前場景,您可以檢查對標籤

int currentSceneTag = [[CCDirector sharedDirector] runningScene].tag; 
if (currentSceneTag == kScene1Tag) { 

} else if (currentSceneTag == kScene2Tag) { 

} 

tag酒店距離CCNode這是基類的CCLayerCCSceneCCSpriteCCMenu ...

+0

有沒有什麼辦法可以NSLog我的CCDirector的當前runningScene,每當我嘗試做一個if語句檢測一個CCScene是否打開時,即使它應該是YES也是NO。 –

+1

@iBradApps我希望我的編輯有幫助。 –

+0

是的。另一種方法是,在Singleton中使用BOOL,並根據場景將其設置爲YES或NO? –

1

該如何找出哪個場景運行

if ([CCDirector sharedDirector].runningScene == yourScene1) { 
    // your scene 1 is showing 
} else { 
    // your scene 2 is showing 
} 

,並找出如果一個節點是運行現場的孩子

BOOL isShowing = NO; 
CCNode *node = yourMenu; 
while (node != nil) { 
    if (node == [CCDirector sharedDirector].runningScene) { 
     isShowing = YES; 
     break; 
    } else { 
     node = node.parent; 
    } 
} 
if (isShowing) { 
    // your menu is in the display hierarchy 
} 
+0

好的第一部分是好的,但什麼isShowing在第二部分做的,爲什麼我在else部分中將節點設置爲node.parent? –

相關問題