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

时间:2013-05-13 20:30:30

标签: cocos2d-iphone

当我点击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];
    }
}

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

3 个答案:

答案 0 :(得分:0)

我不认为你想暂停导演

我会考虑重写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];
    }
}

我会删除带有奇怪默认缩放的缩放操作

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

答案 1 :(得分:0)

创建子类并在项目中有一个额外的文件来修复此缩放问题我感觉不太好。

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

答案 2 :(得分:-1)

我随机想出了一个肮脏的黑客,有人可能会感兴趣。 在我显示菜单的游戏中,游戏无论如何都会暂停。

所以我打电话给[[CCDirector sharedDirector] pause];

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

离开菜单时使用简单的[[CCDirector sharedDirector] resume];