如何在coocs2d中向MenuItemImage添加发光边框效果?

时间:2017-03-21 04:16:59

标签: cocos2d-x

我是cocos2d的新手,我正在尝试制作菜单。我在这里创建了一个MenuItemImage:

mSetting = MenuItemImage::create("setting.png", "setting_selected.png");

现在我正在寻找一种方法来为它的边框添加发光效果,而不是无聊的静态setting_selected.png图像。

(例如:此处菜单图片的浅蓝色发光边框,请在1:00 https://youtu.be/PJSlvhDbB4I?t=1m处查看)。 非常感谢您的关注和帮助:D

更新:我知道使用方形的精灵,它完全适合菜单项,使其看起来像它的边框。然后将其设置为动画(更改颜色)以显示发光效果,就像它们在视频中的效果一样。这可能,轻松有效地完成这项工作吗?

1 个答案:

答案 0 :(得分:1)

您可以使用MenuItemSprite而不是MenuItemImage,并在单击菜单项时运行操作。看看这个链接: Cocos2d-x: simple button effect

您应该在此处找到更多操作:Cocos2d-x actions

我更新并编写了与您需要的相似的示例(这不是您想要的,但可能对您有帮助)。 我有一个名为EditorScene的场景。

在EditorScene.h中:

....
virtual void  onMenuItemSelected(Ref *item );
MenuItemSprite* createMenuButton( const char* img );
MenuItemSprite*   btEnter;
void actionEnter();
....

在EditorScene.cpp中:

bool EditorScene::init()
{
    ...
    btEnter = createMenuButton("button_normal.png");
    auto menu = Menu::create(btEnter, nullptr);
    menu->setPosition( 400,400);
    addChild(menu);
}

MenuItemSprite* EditorScene::createMenuButton( const char* img ) 
{
    Sprite* spr = Sprite::create( img );
    auto light = Sprite::create( "a2.png" );
    light->setTag( 1 );
    light->setPosition( 0,
                    spr->getBoundingBox().size.height );
    light->setOpacity( 0 );

    if( ! spr ) 
    {
        return NULL;
    }

    MenuItemSprite* item = MenuItemSprite::create( spr,
                                               NULL, NULL,
                                               CC_CALLBACK_1( EditorScene::onMenuItemSelected, this ) );
    item->addChild(light);

    return item;
}

void EditorScene::onMenuItemSelected( Ref* item ) {
    Sprite* btm = (Sprite*) item;
    Sprite* light = (Sprite*)btm->getChildByTag( 1 );
    if( item == btEnter ){
        float w = btm->getBoundingBox().size.width;
        float h = btm->getBoundingBox().size.height;
        std::function<void(void)> f1 = std::bind(&EditorScene::actionEnter, this);
        light->runAction(
            Sequence::create(
                    FadeIn::create(0),
                    MoveBy::create( 0.09f, Vec2(w, 0) ),
                    MoveBy::create( 0.045f, Vec2(0, -h) ),
                    MoveBy::create( 0.09f, Vec2(-w, 0) ),
                    MoveBy::create( 0.045f, Vec2(0, h) ),
                    FadeOut::create(0),
                    CallFunc::create( f1  ),
                    NULL ) );
    }
}

void EditorScene::actionEnter()
{
    log("Do something!");
}

此代码创建一个菜单项,通过单击显示在按钮边框上轨道运行的小点: A simple effect

如果要为菜单项的背景设置动画,可以使用Animation :: createWithSpriteFrames。