百分比动作是指按照指定的时间间隔变化百分比的一类动作。
实现类主要是ProgressTo 和 ProgressFromTo
常用方法:
ProgressTo* ProgressTo::create(float duration, float percent)
duration表示持续时间,percent表示目标百分比
代表从0%开始,结束于指定百分比的动作。
ProgressFromTo* ProgressFromTo::create(float duration, float fromPercentage, float toPercentage)
duration表示持续时间,fromPercentage表示初始百分比,toPercentage表示目标百分比
代表从指定百分比开始,结束与指定百分比的动作。
但是百分比动作不能直接被精灵等可见物体执行,而是需要将这些动作包裹进ProgressTimer对象来执行。
auto vSize = Director::getInstance()->getVisibleSize();
auto circle = Sprite::create("circle_blue.png");
auto progressTimer = ProgressTimer::create(circle);
progressTimer->setPosition(vSize / 2);//设置位置 在屏幕中心
progressTimer->setType(ProgressTimerType::RADIAL);//设置模式 RADIAL:半径 BAR:进度条 默认RADIAL
progressTimer->setMidpoint(Vec2(0.5, 0.5));//设置百分比效果参考点 默认(0,0)
progressTimer->setReverseProgress(false);//动作是否反向执行 默认false
progressTimer->setReverseDirection(false);//动作是否逆序执行 默认false
this->addChild(progressTimer);
auto progressTo = ProgressFromTo::create(2, 20, 80);
progressTimer->runAction(RepeatForever::create(progressTo->clone()));//为了方便展示 这里让动作重复执行
运行后会发现,动作只执行了一次,并没有重复执行。
但是,把ProgressTo::create(2, 100)改成ProgressFromTo::create(2, 0, 100), 就会发现动作是可以重复执行的,不知道这算不算一个Bug(coco2d-x 3.2版本)。
效果如下:
想要逆时针旋转,把setReverseDirection(true)设置为true就可以了,效果如下:
可以设置别的参考点,把setMidpoint(Vec2(0.6, 0.6)), 效果如下:
不一定要从0-100,把ProgressFromTo::create(2, 0, 100)改成ProgressFromTo::create(2, 20, 80),效果如下: