void ParticlePerformTest4::doTest() { auto s = Director::getInstance()->getWinSize(); auto particleSystem = (ParticleSystem*) getChildByTag(kTagParticleSystem); // duration particleSystem->setDuration(-1); // gravity particleSystem->setGravity(Vec2(0,-90)); // angle particleSystem->setAngle(90); particleSystem->setAngleVar(0); // radial particleSystem->setRadialAccel(0); particleSystem->setRadialAccelVar(0); // speed of particles particleSystem->setSpeed(180); particleSystem->setSpeedVar(50); // emitter position particleSystem->setPosition(Vec2(s.width/2, 100)); particleSystem->setPosVar(Vec2(s.width/2,0)); // life of particles particleSystem->setLife(2.0f); particleSystem->setLifeVar(1); // emits per frame particleSystem->setEmissionRate(particleSystem->getTotalParticles() / particleSystem->getLife()); // color of particles Color4F startColor(0.5f, 0.5f, 0.5f, 1.0f); particleSystem->setStartColor(startColor); Color4F startColorVar(0.5f, 0.5f, 0.5f, 1.0f); particleSystem->setStartColorVar(startColorVar); Color4F endColor(0.1f, 0.1f, 0.1f, 0.2f); particleSystem->setEndColor(endColor); Color4F endColorVar(0.1f, 0.1f, 0.1f, 0.2f); particleSystem->setEndColorVar(endColorVar); // size, in pixels particleSystem->setEndSize(64.0f); particleSystem->setStartSize(64.0f); particleSystem->setEndSizeVar(0); particleSystem->setStartSizeVar(0); // additive particleSystem->setBlendAdditive(false); }
ParticleSystemQuad::ParticleSystemQuad(fzUInt number, Texture2D *texture) : ParticleSystem(number, texture) { // allo cating quads p_quads = new fzC4_T2_V2_Quad[getTotalParticles()]; // initialize only once the texCoords and the indices initTexCoordsWithRect(fzRect(FZPointZero, p_texture->getContentSize())); initIndices(); #if FZ_GL_SHADERS setGLProgram(kFZShader_mat_aC4_TEX); #endif }
void TestScene::emit() { auto _emitter = ParticleSystemQuad::createWithTotalParticles(100); addChild(_emitter, 10); _emitter->setTexture(Director::getInstance()->getTextureCache()->addImage("images/test_lizi.png")); _emitter->setDuration(1.f); // gravity _emitter->setGravity(Vec2::ZERO); // angle _emitter->setAngle(90); _emitter->setAngleVar(0); // speed of particles _emitter->setSpeed(260); _emitter->setSpeedVar(0); // radial _emitter->setRadialAccel(-260); _emitter->setRadialAccelVar(0); // tagential _emitter->setTangentialAccel(00); _emitter->setTangentialAccelVar(0); // emitter position // _emitter->setPosition( Vec2(160,240) ); _emitter->setPosVar({2,10}); // life of particles _emitter->setLife(1); _emitter->setLifeVar(0); // spin of particles _emitter->setStartSpin(10000); _emitter->setStartSizeVar(360); _emitter->setEndSpin(0); _emitter->setEndSpinVar(360); // color of particles Color4F startColor(0.f, 0.5f, 0.f, 1.0f); _emitter->setStartColor(startColor); Color4F startColorVar(0.f, 0.1f, 0.f, 1.0f); _emitter->setStartColorVar(startColorVar); Color4F endColor(0.1f, 0.5f, 0.1f, 1.0f); _emitter->setEndColor(endColor); Color4F endColorVar(0.1f, 0.1f, 0.1f, 0.2f); _emitter->setEndColorVar(endColorVar); // size, in pixels _emitter->setStartSize(5.0f); _emitter->setStartSizeVar(1.0f); _emitter->setEndSize(ParticleSystem::START_SIZE_EQUAL_TO_END_SIZE); // emits per second _emitter->setEmissionRate(_emitter->getTotalParticles()/_emitter->getLife()); // additive _emitter->setBlendAdditive(true); //addChild(_emitter); _emitter->setPosition(genPos({0.5,0.5})); // _emitter->runAction(RotateBy::create(10.f, 1000)); }
void FloatingEffectManager::toast_cure(const cocos2d::Vec2& srcPos, const cocos2d::Vec2& desPos, DDElementType elementType, int level) { const float speed = 300; float len = (desPos-srcPos).length(); if (len == 0) { return; } auto _emitter = ParticleSystemQuad::createWithTotalParticles(500); _emitter->setAutoRemoveOnFinish(true); _layer->addChild(_emitter, 10); _emitter->setTexture(Director::getInstance()->getTextureCache()->addImage("images/test_lizi.png")); _emitter->setDuration(len/speed); // gravity _emitter->setGravity(Vec2::ZERO); // angle _emitter->setAngle(vector2angel(desPos-srcPos)); _emitter->setAngleVar(0.5f* std::atan(DDConfig::battleCubeWidth()/len) * 180.f/3.1415926f); // speed of particles _emitter->setSpeed(speed); _emitter->setSpeedVar(0); // radial _emitter->setRadialAccel(-(speed/(2*len/speed))); _emitter->setRadialAccelVar(0); // tagential _emitter->setTangentialAccel(00); _emitter->setTangentialAccelVar(0); // emitter position // _emitter->setPosition( Vec2(160,240) ); _emitter->setPosVar({0,0}); // life of particles _emitter->setLife(2*len/speed); _emitter->setLifeVar(0); // spin of particles _emitter->setStartSpin(720); _emitter->setStartSizeVar(360); _emitter->setEndSpin(0); _emitter->setEndSpinVar(360); // color of particles Color4F startColor(0.f, 0.5f, 0.f, 0.8f); _emitter->setStartColor(startColor); Color4F startColorVar(0.f, 0.1f, 0.f, 0.1f); _emitter->setStartColorVar(startColorVar); Color4F endColor(0.1f, 0.5f, 0.1f, 0.8f); _emitter->setEndColor(endColor); Color4F endColorVar(0.1f, 0.1f, 0.1f, 0.1f); _emitter->setEndColorVar(endColorVar); // size, in pixels _emitter->setStartSize(3.0f); _emitter->setStartSizeVar(1.0f); _emitter->setEndSize(ParticleSystem::START_SIZE_EQUAL_TO_END_SIZE); // emits per second _emitter->setEmissionRate(_emitter->getTotalParticles()/_emitter->getLife()); // additive _emitter->setBlendAdditive(true); _emitter->setPosition(srcPos); }
void FloatingEffectManager::toast_help_tail(const cocos2d::Vec2& srcPos, const cocos2d::Vec2& desPos, const cocos2d::Color4F& color) { const float time = 0.2; float len = (desPos-srcPos).length(); if (len == 0) { return; } const float speed = len/time; auto _emitter = ParticleSystemQuad::createWithTotalParticles(500); _emitter->setAutoRemoveOnFinish(true); _layer->addChild(_emitter, 10); _emitter->setTexture(Director::getInstance()->getTextureCache()->addImage("images/test_lizi.png")); _emitter->setDuration(time*5); // gravity _emitter->setGravity(Vec2::ZERO); // angle _emitter->setAngle(vector2angel(srcPos-desPos)); _emitter->setAngleVar(3); // speed of particles _emitter->setSpeed(speed/5); _emitter->setSpeedVar(0); // radial _emitter->setRadialAccel(0); _emitter->setRadialAccelVar(0); // tagential _emitter->setTangentialAccel(0); _emitter->setTangentialAccelVar(0); // emitter position // _emitter->setPosition( Vec2(160,240) ); _emitter->setPosVar({0,0}); // life of particles _emitter->setLife(0.2); _emitter->setLifeVar(0); // spin of particles _emitter->setStartSpin(720); _emitter->setStartSizeVar(360); _emitter->setEndSpin(0); _emitter->setEndSpinVar(360); // color of particles _emitter->setStartColor(color); Color4F startColorVar(0.f, 0.1f, 0.f, 0.1f); _emitter->setStartColorVar(startColorVar); _emitter->setEndColor(color); Color4F endColorVar(0.1f, 0.1f, 0.1f, 0.1f); _emitter->setEndColorVar(endColorVar); // size, in pixels _emitter->setStartSize(2.0f); _emitter->setStartSizeVar(1.0f); _emitter->setEndSize(ParticleSystem::START_SIZE_EQUAL_TO_END_SIZE); // emits per second _emitter->setEmissionRate(_emitter->getTotalParticles()/_emitter->getLife()); // additive _emitter->setBlendAdditive(true); _emitter->setPosition(srcPos); _emitter->runAction(MoveTo::create(0.1, desPos)); }
Head_ParticalEffect void addParticalToHead(Node* node) { Vec2 pos[4]; pos[0] = Vec2(5, 75); pos[1] = Vec2(75, 75); pos[2] = Vec2(75, 5); pos[3] = Vec2(5, 5); for (int i = 0; i < 2; i++) { auto partNode = ParticleSystemQuad::createWithTotalParticles(60); partNode->setTexture(TextureCache::getInstance()->addImage("GameUI/CommonUI/fire.png"));//设置粒子图 partNode->setDuration(-1);//发射时长 // life of particles partNode->setLife(0.5f);//粒子生命 partNode->setLifeVar(0.1f); partNode->setEmissionRate(partNode->getTotalParticles() / partNode->getLife());//发射器发射频率 partNode->setPositionType(ParticleSystem::PositionType::FREE);//设置发射器的跟随模式 // color of particles partNode->setStartColor(ccc4f(0.76f, 0.25f, 0.12f, 1.0f));//起始颜色 partNode->setStartColorVar(ccc4f(0.1f, 0.1f, 0.1f, 0.0f)); partNode->setEndColor(ccc4f(1.0f, 1.0f, 1.0f, 1.0f));//结束颜色 partNode->setEndColorVar(ccc4f(0.1f, 0.1f, 0.1f, 0.1f)); // size, in pixels partNode->setStartSize(15);//粒子大小 partNode->setStartSizeVar(3); partNode->setEndSize(0); partNode->setEndSizeVar(3); // angle partNode->setAngle(0);//发射器角度 partNode->setAngleVar(0); // speed of particles partNode->setSpeed(0);//粒子速度 partNode->setSpeedVar(0); // emitter position partNode->setPosVar(ccp(0, 0));//发射器位置变化 partNode->setBlendAdditive(true); node->addChild(partNode); partNode->setTag(PARTICALTAG); auto move0 = MoveTo::create(1.f, pos[0]); auto move1 = MoveTo::create(1.f, pos[1]); auto move2 = MoveTo::create(1.f, pos[2]); auto move3 = MoveTo::create(1.f, pos[3]); if (i == 0) { partNode->setPosition(pos[0]); partNode->runAction(RepeatForever::create(Sequence::create(move1, move2, move3, move0, nullptr))); } else { partNode->setPosition(pos[2]); partNode->runAction(RepeatForever::create(Sequence::create(move3, move0, move1, move2, nullptr))); } } }
void BaseScene::putEmitter3(Vec2 pos){ m_emitterCreated ++; auto _emitter = ParticleSystemQuad::createWithTotalParticles(20); //_emitter->retain(); _emitter->setTag(m_emitterCreated); this->addChild(_emitter, 10000); ////_emitter->release(); // win32 : Remove this line _emitter->setTexture( Director::getInstance()->getTextureCache()->addImage("ui/ball_outer.png") ); _emitter->setAngleVar(360); // duration _emitter->setDuration(-1); // gravity _emitter->setGravity(Vec2::ZERO); // speed of particles _emitter->setSpeed(320); _emitter->setSpeedVar(80); // radial _emitter->setRadialAccel(-30); _emitter->setRadialAccelVar(-10); // tagential _emitter->setTangentialAccel(30); _emitter->setTangentialAccelVar(0); // emitter position _emitter->setPosition(pos); _emitter->setPosVar(Vec2::ZERO); // life of particles _emitter->setLife(1.6f); _emitter->setLifeVar(0.8f); // color of particles _emitter->setStartColor(C4F_(E::P.C500, 0.4f)); _emitter->setStartColorVar(Color4F(0.1f, 0.1f, 0.1f, 0.3f)); _emitter->setEndColor(C4F_(E::P.C300, 0.3f)); _emitter->setEndColorVar(Color4F(0.1f, 0.1f, 0.1f, 0.2f)); // size, in pixels _emitter->setStartSize(32.0f); _emitter->setStartSizeVar(8.0f); _emitter->setEndSize(ParticleSystem::START_SIZE_EQUAL_TO_END_SIZE); // emits per second _emitter->setEmissionRate(_emitter->getTotalParticles()/_emitter->getLife()); // additive _emitter->setBlendAdditive(false); auto cbStopEmitter = CallFunc::create([this](){m_emitterStopped++; ((ParticleSystemQuad*)this->getChildByTag(m_emitterStopped))->stopSystem();}); auto cbRemoveEmitter = CallFunc::create([this](){m_emitterReleased++; this->getChildByTag(m_emitterReleased)->removeFromParentAndCleanup(true);}); _emitter->runAction(Sequence::create(DelayTime::create(0.3f), cbStopEmitter, DelayTime::create(2.0f), cbRemoveEmitter, nullptr)); }