示例#1
0
void PlaneProtect::ContactEff( Node* node, float radius, const Vec2& pos, float s, const Vec2& offset )
{
	Vec2 randPos = Vec2(pos.x + rand_minus1_1() * 80, pos.y + rand_minus1_1() * 80);

	//两点之间的连线,计算碰撞特效需要旋转的角度
	Vec2 mypos = node->convertToWorldSpaceAR(Vec2::ZERO);
	Vec2 newVec = randPos - mypos;
	float angle = newVec.getAngle() * Pi2Angle;

	newVec.normalize();
	newVec *= radius;

	auto size = node->getContentSize();

	auto endPos =Vec2( size.width*0.5 + newVec.x, size.height*0.5 + newVec.y);
	endPos += offset;

	auto sp = Sprite::create("Effect/contactEff/contactEff.png");
	sp->setPosition(endPos);
	sp->setRotation(90 - angle);
	node->addChild(sp);

	auto parti1 = EffectsManager::addParticle("particla/SpeedUpContact/SpeedUpContact.plist",node,endPos);
	if (parti1)
	{
		parti1->setScale(s);
	}

	ActionInterval* scale = ScaleTo::create(0.1f,(7.0 + rand_0_1()) * s,(2.0f + rand_0_1())*s);
	CallFuncN* func = CallFuncN::create(nullptr,callfuncN_selector(PlaneProtect::removeEff));
	ActionInterval* seq = Sequence::create(scale, func, nullptr);
	sp->runAction(seq);
}
示例#2
0
Bullet* BulletFactory::createStrayBullet()
{
	Bullet* bullet = Bullet::create(getResByTag(ResTag::defaultType));
	bullet->setBitmask(
		SELF_AMMO_CATEGORYBITMASK,
		SELF_AMMO_COLLISIONBITMASK_P,
		SELF_AMMO_CONTACTTESTBITMASK);
	bullet->setUnitId(UnitId::eBullet_15);

	bullet->setBltFlySpeed(1000 + rand_minus1_1() * 100);
	bullet->resetHurt(-150000);
	bullet->setScale(1 + rand_minus1_1() * 0.2);

	//²¥·Å»ðÄñ¶¯»­
	UIController::getInstance()->getEffectsLayer()->playFireBirdAnimation(bullet);
	return bullet;
}
示例#3
0
cocos2d::Vec2 BossTimeOut::randPos()
{
	int randNum = cocos2d::random(0,20);
	if (randNum == m_curRandPos)
	{
		randPos();
	}
	m_curRandPos = randNum;
	auto ws = Director::getInstance()->getWinSize();
	return Vec2(ws.width/20 * randNum + rand_minus1_1() * 10, ws.height + 70);
}
示例#4
0
void WealthEffect::createEffect1(const char* spriteFrameName,int count,float scale,Vec2 startPoint,Vec2 stopPoint)
{
    auto findIter=_animateMap.find(spriteFrameName);
    if (findIter==_animateMap.end())
        return;
    
    Animate* animate=findIter->second;
    Sprite* effectSprite;
    Vec2 position;
    auto runningScene=Director::getInstance()->getRunningScene();
    ExplosionData* explosionData;
    for (int i=0; i<count; ++i)
    {
        effectSprite=Sprite::create();
        effectSprite->setScale(scale);
        runningScene->addChild(effectSprite,_localZOrder);
        
        position.x=startPoint.x+rand_minus1_1()*50;
        position.y=startPoint.y+rand_minus1_1()*20;
        
        explosionData=new ExplosionData;
        explosionData->_explosionSprite=effectSprite;
        explosionData->delayTime=0.03*rand_0_1();
        explosionData->stage=0;
        explosionData->_animate=animate;
        explosionData->_startPoint=position;
        explosionData->_stopPoint=stopPoint;
        explosionData->ID=5;
        
        explosionData->_speed=Vec2(0,0);
        explosionData->_acceleration=Vec2(0,-2000);;
        
        position.y+=100;
        effectSprite->setPosition(position);
        
        _explosionDataVector.push_back(explosionData);
    }
    startEffect();
}