刚刚开始学COCOS2D,在CCMenu中的菜单按键事件中,有按下的效果,但是没有回调按键指定的函数,求教啊~~

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刚刚开始学COCOS2D,在CCMenu中的菜单按键事件中,有按下的效果,但是没有回调按键指定的函数,求教啊~~相关的知识,希望对你有一定的参考价值。

public void menuText()

removeChild(intro, true);
CGSize winSize = CCDirector.sharedDirector().displaySize();
menu = CCSprite.sprite("menubg.png");
menu.setPosition(CGPoint.ccp(menu.getContentSize().width / 2.0f, winSize.height / 2.0f));
CCMenuItemFont.setFontSize(15);
CCMenuItemFont.setFontName("Marker Felt");
CCMenuItemFont newGame = CCMenuItemFont.item("New Game");
// CCMenuItemFont newGame = CCMenuItemFont.item("New Game", this, selector)
CCMenuItemFont InsGame = CCMenuItemFont.item("Instaction",this,"instr");
// CCLabel label, CCNode rec, String cb
CCMenuItemFont snd = CCMenuItemFont.item("Sound on");
CCMenuItemFont ab = CCMenuItemFont.item("About FuguMobile");
CCMenuItemFont exit = CCMenuItemFont.item("Exit");
CCMenu mu= CCMenu.menu(newGame,InsGame,snd,ab,exit);
mu.setPosition(CGPoint.ccp(130.0f,130.0f));
mu.alignItemsVertically(10.0f);
// mu.ccAccelerometerChanged(10.0f, 10.0f, 0.0f);
addChild(menu);
addChild(mu);
// menu.setTag(2);

public void instr()

inst = CCSprite.sprite("inst.png");
CGSize winSize = CCDirector.sharedDirector().displaySize();
inst.setPosition(CGPoint.ccp(inst.getContentSize().width / 2.0f, winSize.height / 2.0f));
addChild(inst);
// intro.setTag(3);

public boolean ccTouchesEnded(MotionEvent event)

intro.runAction(CCSequence.actions(CCCallFuncN.action(this, "spriteMoveFinished")));
return true;

public void spriteMoveFinished(Object sender)

CCSprite sprite = (CCSprite)sender;
if (sprite.getTag() == 1)

menuText();

// if(sprite.getTag() == 3)
//
// menuText();
//
this.removeChild(sprite, true);

这是原码,求教~~

这个应该是cocos2d-x吧,我只写过cocos2d,总得来说intro这个对象在touchend里面执行的跳转函数动作,但是貌似在touch事件触发之前这个对象就已经被remove了,所以导致的问题 参考技术A 我着实没看懂你事怎么写的。至少应该有:
CCMenuItemFont *font = [CCMenuItemFont itemWithTarget:self selector:@selector(myMethod:)];吧!现在没有selector添加的地方啊!
这里有一个CCMenu的例子;
CCMenuItem *starMenuItem = [CCMenuItemImage itemFromNormalImage:@"ButtonStar.png" selectedImage:@"ButtonStarSel.png" target:self
selector:@selector(starButtonTapped:)];
starMenuItem.position = ccp(60, 60);
CCMenu *starMenu = [CCMenu menuWithItems:starMenuItem, nil];
starMenu.position = CGPointZero;
[self addChild:starMenu];
然后相应函数starButtonTapped,就可以有相应了。

cocos2d 中的菜单层次结构

【中文标题】cocos2d 中的菜单层次结构【英文标题】:Menu hierarchy in cocos2d 【发布时间】:2013-06-19 07:53:49 【问题描述】:

是否可以在 CCMenu 中组织按钮,使它们的功能与其他菜单一样?比如这个浏览器的File、Edit、View等。

我现在用的是标准:

CCMenu *selectMenu = [CCMenu menuWithItems: item1, item2... nil];
[selectMenu alignItemsHorizontallyWithPadding:15];
CGSize winSize = [CCDirector sharedDirector].winSize;
CGPoint topLeft = CGPointMake(winSize.width / 2.0, winSize.height/1.035);
[selectMenu setPosition:topLeft];
[self addChild:selectMenu];

这行得通,但我有太多按钮无法排成一行,因此提出了这个问题。

【问题讨论】:

【参考方案1】:

这是可能的,但您必须在用户单击菜单项时创建子菜单。

类似这样的:

CCMenu *menu = nil;

    CCMenuItem *item = [CCMenuItemFont itemWithString:@"Edit" block:^(id sender) 

        CCMenu *submenu = nil;

        CCMenuItem *subitem = [CCMenuItemFont itemWithString:@"SubItem" block:^(id sender) 
            //Do Stuff here
            [submenu removeFromParent];
        ];

        CCMenuItem *subitem2 = [CCMenuItemFont itemWithString:@"CloseSubMenu" block:^(id sender) 

            [submenu removeFromParent];
        ];

        submenu = [CCMenu menuWithItems:subitem,subitem2, nil];

        [menu addChild:submenu];

     ];

    menu = [CCMenu menuWithItems:item, nil];

    [self addChild:menu];

您仍然需要设置位置以确保它在屏幕上看起来不错。

【讨论】:

以上是关于刚刚开始学COCOS2D,在CCMenu中的菜单按键事件中,有按下的效果,但是没有回调按键指定的函数,求教啊~~的主要内容,如果未能解决你的问题,请参考以下文章

cocos2d-x中锚点设置及定位方式

自学cocos2d js游戏开发应该按啥步骤进行

音乐切换按钮objective-c

cocos2d第二次打开后无响应的场景

我的第一个 iPhone 的 Cocos2d 应用程序中的问题?

cocos2d 1.0 beta 两个场景之间的过渡和程序刚刚退出?