是否可以檢測到現場顯示哪個CCScene?我在我的比賽中有2個CCScenes,並且我想要一個特定的動作發生。(Cocos2D)檢測哪個CCScene正在顯示?
也很快相關的問題,如果我想檢查是否CCMenu是不顯示的是我會做類似
if (!menu) {
//Menu is not showing currently
}
我有點小白,當談到的Cocos2D如此請原諒我:)
謝謝!
是否可以檢測到現場顯示哪個CCScene?我在我的比賽中有2個CCScenes,並且我想要一個特定的動作發生。(Cocos2D)檢測哪個CCScene正在顯示?
也很快相關的問題,如果我想檢查是否CCMenu是不顯示的是我會做類似
if (!menu) {
//Menu is not showing currently
}
我有點小白,當談到的Cocos2D如此請原諒我:)
謝謝!
可以使用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
這是基類的CCLayer
,CCScene
,CCSprite
,CCMenu
...
該如何找出哪個場景運行
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
}
好的第一部分是好的,但什麼isShowing在第二部分做的,爲什麼我在else部分中將節點設置爲node.parent? –
有沒有什麼辦法可以NSLog我的CCDirector的當前runningScene,每當我嘗試做一個if語句檢測一個CCScene是否打開時,即使它應該是YES也是NO。 –
@iBradApps我希望我的編輯有幫助。 –
是的。另一種方法是,在Singleton中使用BOOL,並根據場景將其設置爲YES或NO? –