Cocos2d iphone 如何防止CCMenuItemLabel或CCMenu在点击时更改字体大小?

Cocos2d iphone 如何防止CCMenuItemLabel或CCMenu在点击时更改字体大小?,cocos2d-iphone,Cocos2d Iphone,当我点击由CCLabelTTF制作的CCMenuItemLabel时,我得到的动画显示文本在点击时会增大,这一切都会破坏我的界面。我该如何解决这个问题?我不希望菜单在点击时做出反应。我在CCMenuItemLabel或CCMenuItem或CCMenu中未找到任何相关内容 我找到了CCMenuItemLabel的以下代码: -(void) selected { // subclass to change the default action if(_isEnabled) {

当我点击由CCLabelTTF制作的CCMenuItemLabel时,我得到的动画显示文本在点击时会增大,这一切都会破坏我的界面。我该如何解决这个问题?我不希望菜单在点击时做出反应。我在CCMenuItemLabel或CCMenuItem或CCMenu中未找到任何相关内容

我找到了CCMenuItemLabel的以下代码:

-(void) selected
{
    // subclass to change the default action
    if(_isEnabled) {
        [super selected];

        CCAction *action = [self getActionByTag:kCCZoomActionTag];
        if( action )
            [self stopAction:action];
        else
            _originalScale = self.scale;

        CCAction *zoomAction = [CCScaleTo actionWithDuration:0.1f scale:_originalScale * 1.2f];
        zoomAction.tag = kCCZoomActionTag;
        [self runAction:zoomAction];
    }
}

-(void) unselected
{
    // subclass to change the default action
    if(_isEnabled) {
        [super unselected];
        [self stopActionByTag:kCCZoomActionTag];
        CCAction *zoomAction = [CCScaleTo actionWithDuration:0.1f scale:_originalScale];
        zoomAction.tag = kCCZoomActionTag;
        [self runAction:zoomAction];
    }
}

事实证明,它运行缩放操作,除了对菜单项进行子类化之外,还有什么方法可以覆盖它吗?

我随机想出了一个肮脏的破解方法,可能有人对此感兴趣。 在我的游戏中,当我显示菜单时,游戏将暂停

所以我调用
[[CCDirector sharedDirector]pause]

这会降低帧速率并暂停所有操作,因此点击菜单项不再触发操作,它确实会触发操作,但不会运行,因为它已暂停


离开菜单后,使用简单的
[[CCDirector sharedDirector]resume]

我想你不想让导演停下来

我将研究覆盖CCMenuitemlabel

请看以下方法:

-(void) selected

{
    // subclass to change the default action
    if(isEnabled_) {
        [super selected];

        CCAction *action = [self getActionByTag:kCCZoomActionTag];
        if( action )
            [self stopAction:action];
        else
            originalScale_ = self.scale;

        CCAction *zoomAction = [CCScaleTo actionWithDuration:0.1f scale:originalScale_ * 1.2f];
        zoomAction.tag = kCCZoomActionTag;
        [self runAction:zoomAction];
    }
}
我将使用wierd默认缩放删除缩放操作

[CCScaleTo actionWithDuration:0.1f scale:originalScale_ * 1.2f];

为了解决这个缩放问题,在项目中创建一个子类并添加一个额外的文件,我感觉不是很好


您可以创建一个CCNodeRGBA对象,将contentsize设置为与CCLabelTTF维度相同的大小,将CCLabelTTF粘贴到CCNodeRGBA对象中,并将其作为参数传递给CCMenuItemSprite。

再次搜索菜单/项代码以查找“缩放”(属性或操作)的用法,它就在那里的某个地方。@LearnCos2D编辑的问题我最终生成了子类,而不是[super selected/unselected]这样就不会调用此代码。但是,我确实在我的方法中实现了此代码的super中的任何内容:CCMenuItem类(琐碎,查找)。无论哪种方式,像我这样进行子类化还是直接修改CCMenuItemLabel都是一个糟糕的选择:两者都给我留下了一个可维护性问题。