自己做cocos2d-x的程序已经是两年前的事了,现在突然心血来潮想写一下。
之前我在做一个游戏的时候,我在知道有粒子效果这个东西后,果断的想到了把它加到我的splash中,之前有一个很好用的粒子效果的一个软件,但是无奈,我现在已经不知道叫做什么名字,而且好像我也已经没有了资源。但是最近又找到了一个可以用的粒子效果器。ParticleDesigner Mac 提取码: p57i 点击可以进行下载。解压后只有两个文件,一个进行注册一下,另一个就可以使用。具体我不再说怎么使用了。
唠叨了大半天,,,正式进入主题
示例一
1.首先你得确认你是要将粒子效果加载到什么里面,如首先,可以进行测试一下,就是直接点击一个btn,然后释放粒子效果。代码如下:
//我在这里设置了一个btn回调事件,在点按btn时,将会触发事件发生。 这个写在cpp文件中,同时你应该在头文件中进行声明。
void HelloWorld::btnCallFunc(Ref *target)
{
auto _emiter =ParticleSystemQuad::create("res/test.plist");
//设置离子的纹理 test.plist就是你从粒子效果器中下载的粒子效果并加入到你创建的文件的 res文件下的
auto texture = Director::getInstance()->getTextureCache()->addImage("res/mo_3.png");
//textture在这里的作用是设置了你的粒子效果最终呈现的形态,我在这里加了一个小方块图片,最终将会让我的小方块以粒子效果呈现。
_emiter->setTexture(texture);
_emiter->setStartColor(Color4F(1,0,0,1));
_emiter->setStartColorVar(Color4F(0,0,0,0));
_emiter->setEndColor(Color4F(1,0,0,1));
_emiter->setEndColorVar(Color4F(0,0,0,0)); //以上都只是设置粒子效果的一些简单函数以及参数,在cocos2d-x中你可以查看各个函数的作用以及应该是什么样子的参数
_emiter->setPosition(Vec2(700,600));//设置粒子效果坐标 this->addChild(_emiter);//将此加载到本场景上 }
如上图所示。。。图有点丑。。。勿介意 。。以上就是简单的加载粒子效果。
-------------------------------------------------------------------------------------------------------------------------------------------------------------
以上是分割线
之前说了我自己之前在做游戏时,把粒子加到了splash中,虽然有点不可取,因为正常我们是非常讨厌splash这个设定的。
但是我还是要说一下,如何加入到splash中。。。。
示例二
可以看到以下是一个动作的回调动作,到底是一个什么样的动作呢,这个可以由你自己决定,不要忘了在头文件中加上函数声明。
void SplashScene::actionSplashCallback() { auto visibleSize = Director::getInstance()->getVisibleSize();//此处是获得当前屏幕的大小
auto _emiter =ParticleSystemQuad::create("res/splash.plist");//设置离子的纹理 auto texture = Director::getInstance()->getTextureCache()->addImage("b.jpg"); _emiter->setTexture(texture); _emiter->setPosition(Vec2(visibleSize.width/2,visibleSize.height/2+200)); this->addChild(_emiter); }
比如当前场景fadein,然后在完全结束fadein的时候,你就可以进行动作回调。
auto callFuncSplash = CallFunc::create(CC_CALLBACK_0(SplashScene::actionSplashCallback, this));//可以在setUi的函数下进行编写代码,创建一个在当前场景的回调事件,
auto actionSplash = Sequence::create(fadeInBackground,delaySplash,callFuncSplash, NULL);//并将其创建动作回调函数callFuncSplash只是其中的一个回调动作而已,当然也可以只有这一个动作,也可以添加像是delaySplash 自命名的延迟几秒出现splash之类的动作回调事件,找机会我再补充。。。
spriteSplash->runAction(actionSplash);//再将这个动作回调加载到动作场景队列中即可
以上就是当时我设计的游戏的splash的最终效果图,粒子效果就是你能看到的小方块,从主logo背后散发出来。