新手问题 如何延时执行函数?

第三次的动画并没有出现,就已经开始执行removechild和clear的内容 。。。。

auto iceBtn = dynamic_cast<Button*>(_layout->getChildByName(“iceBtn”));
iceBtn->addTouchEventListener(=](Ref* pSender, Widget::TouchEventType type)
{
if(type == Widget::TouchEventType::ENDED)
{
//MessageBox(“aaaa”,“alert”);
Vec2 pos = iceBtn->getPosition();//获取按钮坐标
auto iceSprite = Sprite::create(“ice.png”);
iceSprite->setPosition(pos);//让精灵出现在按钮位置
_layout->addChild(iceSprite);
auto moveTo = MoveTo::create(0.5, skillPos(_skillsVector.size()));//根据返回的坐标创建action
iceSprite->runAction(moveTo);
_skillsVector.pushBack(iceSprite);//将精灵存入数组
if(_skillsVector.size() == 3)
{
//遍历集合,removechild集合元素 且 clear集合
}
}
});
Vec2 SkillsScene::skillPos(int size)
{
Vec2 pos;
switch (size)
{
case 0:
pos.x = _pos1X;
pos.y = _pos1Y;
break;
case 1:
pos.x = _pos2X;
pos.y = _pos2Y;
break;
case 2:
pos.x = _pos3X;
pos.y = _pos3Y;
break;
default:
break;
}
return pos;
}

把MoveTo并行一个DelayTime和CallFunc的动作队列来试试

delaytime我知道,可以和动作放到一起执行延时sequence,callfunc不太明白,查了下好多都是回调的callfunc,能详细点么,刚接触没多久,感激不尽:14::14::14::14:

问题解决了,我还是回来说下,希望能帮到同样遇到这问题的新手,虽然问题有点简单。:13::13:

在sprite执行完moveto动作之后,定义一个有delay的组合动作队列,通过callfunc回调其他函数进行if判断
auto moveTo = MoveTo::create(0.5, skillPos(_skillsVector.size()));//根据返回的坐标创建action
iceSprite->runAction(moveTo);
_skillsVector.pushBack(iceSprite);//将精灵存入数组
auto delay = DelayTime::create(3);//延时3秒 调用判断函数
auto callFunc = CallFunc::create(CC_CALLBACK_0(SkillsScene::gameRule, this));
auto seq1 = Sequence::create(delay, callFunc, NULL);//延时一秒执行callfunc调用gamerule函数
iceSprite->runAction(seq1);

if判断写在gameRule函数内去