基于WiEngine游戏引擎--战斗场景之技能
点击技能的按钮,就会放出技能。技能有冷却事件,表现在按钮上(下图更清晰一些)。

这里的技能用到的是WiEngine粒子系统中的特效。我的理解,粒子系统是一个标准,只要给定相应的参数,就可以显示一些很炫的效果。我本来是想用ParticleDesigner来设计粒子效果的,不过试了一下,发现载入有些问题,所以改用WiEngine中内置的特效了。我这里使用的是官方例子的Meteor(位于Demo/ParticleDemon.h中;补充一下WiEngine的好处,引擎中例子特别详细,我这个demo中的大部分代码都是从例子中改过来的)。我对Meteor进行了一个改进,代码如下:
class Button2: public wyNode {public:MyScene* scene;wyButton* button;wySprite* enable;wyProgressTimer* disable;wyCallFunc* action;int type;public:Button2(MyScene* scene, const char* ne, const char* ndis, int type) {this->scene = scene;this->type = type;wyZwoptexManager* zm = wyZwoptexManager::getInstance();// create spritesenable = zm->makeSprite(ne);disable = wyProgressTimer::make(zm->makeSprite(ndis));disable->setStyle(RADIAL_CCW); //设置进度条的改变方式disable->setScale(0.9f);// create atlas buttonbutton = new wyButton(enable, enable, enable, NULL, NULL,wyTargetSelector::make(this, SEL(Button2::onButtonClicked)));addChildLocked(button);disable->setPosition(button->getPositionX(), button->getPositionY());disable->setVisible(false);addChildLocked(disable);}virtual ~Button2() {}void onButtonClick() {switch(type) {case Boy::BOY_JUMP:scene->jump();break;case Boy::BOY_HIT:scene->shot();break;}}void onButtonClickedEnd() {disable->setVisible(false);button->setEnabled(true);}void onButtonClicked(wyTargetSelector* ts) {button->setEnabled(false);disable->setVisible(true);wyCallFunc* onaction = wyCallFunc::make(wyTargetSelector::make(this, SEL(Button2::onButtonClick)));wyCallFunc* setenable = wyCallFunc::make(wyTargetSelector::make(this, SEL(Button2::onButtonClickedEnd)));wySequence* s = wySequence::make(onaction, wyProgressTo::make(3, 100, 0), setenable, NULL);disable->runAction(s);}};