MenuItemImageではなくMenuItemSpriteを使用し、メニュー項目をクリックするとアクションを実行できます。 (それはあなたが望むものを正確ではありませんが、あなたを助けるかもしれない)Cocos2d-x actions
私が更新し、あなたが必要なものと類似している例を記述します。 Cocos2d-x: simple button effect
あなたが現在以上のアクションを見つける必要があります。このリンクを見てください。 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!");
}
このコードは、クリックすることで、ボタンの境界に周回小さなドットが表示されていることを、メニュー項目を作成します。
メニュー項目の背景をアニメーション化するには、Animation :: createWithSpriteFramesを使用できます。