2011-08-24 53 views
0

我想通過在我的場景上顯示幾個精靈並顯示一個menuitemsprite作爲繼續按鈕來模擬cocos2d中的模態視圖。在下面的代碼中,我通過模態顯示了我的遊戲,並使用CCMenuItemSprite設置了菜單;它不響應觸摸,以及一個CCMenuItemImage;哪些工作。Cocos2d CCMenuItemSprite在堆疊菜單不起作用

-(void) gameOver { 

    CGSize size = [[CCDirector sharedDirector] winSize]; 
    self.menu.isTouchEnabled = NO; 
    CCLayer *modalLayer = [[CCLayer alloc] init]; 
    [self addChild:modalLayer z:20]; 

    CCSprite *spriteGameOver = [CCSprite spriteWithFile:@"game_over.png"]; 
    spriteGameOver.position = ccp(size.width/2,size.height/2); 

    CCLabelTTF *lblGameOver = [CCLabelTTF labelWithString:[NSString stringWithFormat:@"Game Over!\nScore %d/%d",numCorrect,questionIdx] dimensions:CGSizeMake(380, 300) alignment:CCTextAlignmentCenter fontName:@"Trebuchet MS" fontSize:50.0f]; 
    // position the label on the center of the screen 

    lblGameOver.position = ccp(size.width/2-200, size.height/2-100); 
    lblGameOver.color = ccc3(20, 20, 20); 
    lblGameOver.opacity = 0; 
    // add the label as a child to this Layer 
    [spriteGameOver addChild: lblGameOver]; 
    spriteGameOver.opacity = 0; 
    [modalLayer addChild:spriteGameOver]; 

    CCSprite *spriteGameOverBtn = [CCSprite spriteWithFile:@"mainButton.png" rect:CGRectMake(0,0,300,60)]; 
    spriteGameOverBtn.position = ccp(size.width/2,size.height/2-100); 
    CCLabelTTF *lblGameOverBtn = [CCLabelTTF labelWithString:@"Continue" dimensions:CGSizeMake(300, 60) alignment:CCTextAlignmentCenter fontName:@"Trebuchet MS" fontSize:40.0f]; 
    //lblGameOverBtn.position = ccp(size.width/2-200, size.height/2-300); 
    [lblGameOverBtn setAnchorPoint:ccp(0.0f,0.1f)]; 
    lblGameOverBtn.color = ccc3(20, 20, 20); 
    lblGameOverBtn.opacity = 0; 
    // add the label as a child to this Layer 
    [spriteGameOverBtn addChild: lblGameOverBtn]; 
    spriteGameOverBtn.opacity = 0; 

    CCMenuItemImage *itemH = [CCMenuItemImage itemFromNormalImage:@"backArrow.png" selectedImage:@"backArrowS.png" target:self selector:@selector(goToMain:)]; 
    itemH.position = ccp(size.width/2,size.height/2-100); 

    CCMenuItemSprite *mGameOverBtn = [CCMenuItemSprite itemFromNormalSprite:spriteGameOverBtn selectedSprite:nil disabledSprite:nil target:self selector:@selector(goToMain:)]; 

    CCMenu *menuGO = [CCMenu menuWithItems: itemH,mGameOverBtn, nil]; 
    menuGO.position = ccp(0, 0); 

    [modalLayer addChild:menuGO z:21]; 




    [lblGameOverBtn runAction:[CCSequence actions:[CCDelayTime actionWithDuration: 1.75f],[CCFadeIn actionWithDuration: 1.75f],nil]]; 

    [spriteGameOverBtn runAction:[CCSequence actions:[CCDelayTime actionWithDuration: 1.75f],[CCFadeIn actionWithDuration: 1.75f],[CCDelayTime actionWithDuration: 3.75f],nil]]; 


    [lblGameOver runAction:[CCSequence actions:[CCDelayTime actionWithDuration: 1.75f],[CCFadeIn actionWithDuration: 1.75f],[CCDelayTime actionWithDuration: 3.75f],nil]]; 

    [spriteGameOver runAction:[CCSequence actions:[CCDelayTime actionWithDuration: 1.75f],[CCFadeIn actionWithDuration: 1.75f],[CCDelayTime actionWithDuration: 3.75f],nil]]; 

    //[self runAction:[CCSequence actions:[CCDelayTime actionWithDuration: 2.75f],[CCCallFunc actionWithTarget:self selector:@selector(goToMain:)], nil]]; 

} 

回答

0

你是否已經使用touch調度器註冊了你的場景,並且你的選擇器實際上做了些什麼?

[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:NO] 
+0

場景響應觸摸並用於獲取遊戲結束點。事實上,當我將菜單上的精靈顯示在精靈上時,菜單仍然會響應。所以爲了解決這個問題,我禁用了底層菜單。所以現在我想要工作的菜單是最高Z順序並且被啓用。我的迴歸將是使CCMenuItemImage成爲一個透明的圖像,並完成它。 – Nungster

1

我也遇到了與CCMenuItemSprite相同的問題。它看起來像CCMenuItemSprite類是有點bug。在我的情況下,它不響應觸摸。但是我發現它與CCMenuItemSprite中的多層Sprites有關。所以當我使用一個單層Sprite的時候它可以工作,但是當我使用一個包含多個嵌入精靈的Sprite時,它並不會。

我的「未就緒,但」解決方案,現在是contentSize設置爲CCMenuItemSprite適當大小已經初始化之後:

 CCMenuItemSprite * menuItem = [CCMenuItemSprite itemWithNormalSprite:multiLayeredSprite selectedSprite:nil target:self selector:@selector(clickHandler:)]; 
    [s setContentSize:backgroundSprite.contentSize]; 
    CCMenu * menu = [CCMenu menuWithItems: 
      menuItem, 
      nil]; 

它接收觸摸事件了。我現在唯一的問題是矩形的位置......它仍然在右上角。我會試着找出如何解決這個問題。 希望這可以澄清一些問題。