Cocos2d x 如何在coocs2d中将发光边框效果添加到MenuItemImage?

Cocos2d x 如何在coocs2d中将发光边框效果添加到MenuItemImage?,cocos2d-x,Cocos2d X,我是cocos2d的新手,我正在尝试制作菜单。我在这里创建了一个MenuItemImage: mSetting = MenuItemImage::create("setting.png", "setting_selected.png"); 现在,我正在寻找一种方法,将发光效果添加到它的边框中,而不是一个无聊的静态设置\u selected.png图像 (例如:此处菜单图像的浅蓝色发光边框,请在1:00查看)。 非常感谢您的关注和帮助 更新:我有一个想法,使用一个方形的精灵,它正好适合菜单项,使

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

mSetting = MenuItemImage::create("setting.png", "setting_selected.png");
现在,我正在寻找一种方法,将发光效果添加到它的边框中,而不是一个无聊的静态
设置\u selected.png
图像

(例如:此处菜单图像的浅蓝色发光边框,请在
1:00查看)。
非常感谢您的关注和帮助


更新:我有一个想法,使用一个方形的精灵,它正好适合菜单项,使它看起来像它的边框。然后制作动画(更改颜色)以显示发光效果,就像它们在视频中所做的那样。这是否可能、简单且有效地完成工作?

您可以使用MenuItemSprite而不是MenuItemImage,并在单击菜单项时运行操作。请看此链接:

您应该在此处找到更多操作:

我更新并编写了与您需要的类似的示例(它并不完全是您想要的,但可能会对您有所帮助)。 我有一个场景叫Editorsene

在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!");
}
bool EditorScene::init()
{
...
btEnter=createMenuButton(“button_normal.png”);
自动菜单=菜单::创建(btEnter,nullptr);
菜单->设置位置(400400);
addChild(菜单);
}
MenuItemSprite*编辑器场景::createMenuButton(常量字符*img)
{
Sprite*spr=Sprite::create(img);
自动灯光=精灵::创建(“a2.png”);
灯光->设置标签(1);
灯光->设置位置(0,
spr->getBoundingBox().size.height);
灯光->设置不透明度(0);
如果(!spr)
{
返回NULL;
}
MenuItemSprite*项=MenuItemSprite::创建(spr,
空,空,,
CC_CALLBACK_1(EditorScene::onMenuItemSelected,this));
项目->添加子项(灯光);
退货项目;
}
void EditorScene::onMenuItemSelected(参考*项){
雪碧*btm=(雪碧*)项目;
精灵*灯光=(精灵*)btm->getChildByTag(1);
如果(项==b输入){
float w=btm->getBoundingBox().size.width;
浮点h=btm->getBoundingBox().size.height;
std::function f1=std::bind(&EditorScene::actionEnter,this);
灯光->运行动作(
序列::创建(
FadeIn::创建(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)),
淡出::创建(0),
CallFunc::create(f1),
空);
}
}
void EditorScene::actionEnter()
{
日志(“做点什么!”);
}
此代码创建了一个菜单项,通过单击该菜单项,可以在按钮的边框上显示一个小点:

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