有一个菜单按钮回调函数里有一些其他菜单按钮的动作,怎么控制上一次点击执行完了所有的动作,才能再点击该按钮?
在你的Actiondone回调里去设置 menu->setEnabled(bool value);
请版主看一下
void HelloWorld::btnCallback(Ref* pSender)
{
if (isShow)
{
menuItem->runAction(RotateTo::create(0.3f, -720));
menuItem1->runAction(HelloWorld::spawnIn(0.6f));
menuItem2->runAction(HelloWorld::spawnIn(0.65f));
menuItem3->runAction(HelloWorld::spawnIn(0.7f));
menuItem4->runAction(HelloWorld::spawnIn(0.75f));
menuItem5->runAction(HelloWorld::spawnIn(0.8f));
}
else
{
menuItem->runAction(RotateTo::create(0.3f, 720));
menuItem1->runAction(HelloWorld::spawnOut(Vec2(200, 400), 0.6f));
menuItem2->runAction(HelloWorld::spawnOut(Vec2(270, 370), 0.65f));
menuItem3->runAction(HelloWorld::spawnOut(Vec2(330, 330), 0.7f));
menuItem4->runAction(HelloWorld::spawnOut(Vec2(370, 270), 0.75f));
menuItem5->runAction(HelloWorld::spawnOut(Vec2(400, 200), 0.8f));
}
isShow = !isShow;
}
ActionInterval* HelloWorld::spawnIn(float duration)
{
ActionInterval* rotateTo = RotateTo::create(duration, -1080);
auto move_ease_in = EaseBackIn::create(MoveTo::create(duration, Vec2(200, 200)));
return Spawn::create(move_ease_in, rotateTo, nullptr);
}
ActionInterval* HelloWorld::spawnOut(Vec2 point, float duration)
{
//auto delay = DelayTime::create(1);
ActionInterval* rotateTo = RotateTo::create(duration, 1080);
auto move_ease_out = EaseBackOut::create(MoveTo::create(duration, point));
return Spawn::create(move_ease_out, rotateTo, nullptr);
}
void HelloWorld::btnCallback1(Ref* pSender)
{}
void HelloWorld::btnCallback2(Ref* pSender)
{}
void HelloWorld::btnCallback3(Ref* pSender)
{}
void HelloWorld::btnCallback4(Ref* pSender)
{}
void HelloWorld::btnCallback5(Ref* pSender)
{}
btnCallback这个回调是点击按钮的,里面有几个精灵的动作,按您说的不知道该在哪里设置menu->setEnabled(bool value);
我在最后一个runAction里外层又包了一个队列动作然后在回调里设置menu->setEnabled(bool value); 但不能绝对控制连续点击的问题。
我给你改了一下代码,代码如下:
#include "HelloWorldScene.h"
USING_NS_CC;
Scene* HelloWorld::createScene()
{
// 'scene' is an autorelease object
auto scene = Scene::create();
// 'layer' is an autorelease object
auto layer = HelloWorld::create();
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
// on "init" you need to initialize your instance
bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !Layer::init() )
{
return false;
}
menuItem = MenuItemImage::create("CloseNormal.png","CloseSelected.png",CC_CALLBACK_1(HelloWorld::btnCallback,this));
menuItem1 = MenuItemImage::create("CloseNormal.png","CloseSelected.png",CC_CALLBACK_1(HelloWorld::btnCallback1,this));
menuItem2 = MenuItemImage::create("CloseNormal.png","CloseSelected.png",CC_CALLBACK_1(HelloWorld::btnCallback2,this));
menuItem3 = MenuItemImage::create("CloseNormal.png","CloseSelected.png",CC_CALLBACK_1(HelloWorld::btnCallback3,this));
menuItem4 = MenuItemImage::create("CloseNormal.png","CloseSelected.png",CC_CALLBACK_1(HelloWorld::btnCallback4,this));
menuItem5 = MenuItemImage::create("CloseNormal.png","CloseSelected.png");
menu = Menu::create(menuItem,menuItem1,menuItem2,menuItem3,menuItem4,menuItem5,nullptr);
menu->alignItemsVerticallyWithPadding(10);
menu->setPosition(Point(100,170));
this->addChild(menu);
isShow = true;
return true;
}
void HelloWorld::btnCallback(Ref* pSender)
{
if (isShow)
{
menuItem->runAction(RotateTo::create(0.3f, -720));
menuItem1->runAction(HelloWorld::spawnIn(0.6f));
menuItem2->runAction(HelloWorld::spawnIn(0.65f));
menuItem3->runAction(HelloWorld::spawnIn(0.7f));
menuItem4->runAction(HelloWorld::spawnIn(0.75f));
menuItem5->runAction(Sequence::create(HelloWorld::spawnIn(0.8f),CallFunc::create(CC_CALLBACK_0(HelloWorld::btnCallback5,this)) ,NULL));
}
else
{
menuItem->runAction(RotateTo::create(0.3f, 720));
menuItem1->runAction(HelloWorld::spawnOut(Point(200, 400), 0.6f));
menuItem2->runAction(HelloWorld::spawnOut(Point(270, 370), 0.65f));
menuItem3->runAction(HelloWorld::spawnOut(Point(330, 330), 0.7f));
menuItem4->runAction(HelloWorld::spawnOut(Point(370, 270), 0.75f));
menuItem5->runAction(Sequence::create(HelloWorld::spawnOut(Point(400, 200), 0.8f),CallFunc::create(CC_CALLBACK_0(HelloWorld::btnCallback5,this)),NULL));
}
isShow = !isShow;
menu->setEnabled(false);
}
ActionInterval* HelloWorld::spawnIn(float duration)
{
ActionInterval* rotateTo = RotateTo::create(duration, -1080);
auto move_ease_in = EaseBackIn::create(MoveTo::create(duration, Point(200, 200)));
return Spawn::create(move_ease_in, rotateTo, nullptr);
}
ActionInterval* HelloWorld::spawnOut(Point point, float duration)
{
//auto delay = DelayTime::create(1);
ActionInterval* rotateTo = RotateTo::create(duration, 1080);
auto move_ease_out = EaseBackOut::create(MoveTo::create(duration, point));
return Spawn::create(move_ease_out, rotateTo, nullptr);
}
void HelloWorld::btnCallback1(Ref* pSender)
{}
void HelloWorld::btnCallback2(Ref* pSender)
{}
void HelloWorld::btnCallback3(Ref* pSender)
{}
void HelloWorld::btnCallback4(Ref* pSender)
{}
void HelloWorld::btnCallback5()
{
menu->setEnabled(true);
}
```
代码和效果图已发。我点击那个按钮的时候是连续点击的。
这效果碉堡啊,有点像android的path。
我最初也是在最后一个action里回调来控制的,只是用的一个变量,然后在点击里做变量的判断,但不能绝对控制,快速点击也会出问题。
多谢版主了!
谢谢各位,已经解决了。
