예제 #1
0
void Role::skillAction(SkillState sk){
    switch (sk) {
        case Skill_Blood:{
            SimpleAudioEngine::sharedEngine()->playEffect(S_BLOOD);
            CCParticleSystem* particle = CCParticleSystemQuad::create("Teleport.plist");
            particle->setStartColor(ccc4f(0.5, 0.5, 0.5, 1));
            particle->setPosition(this->getObjPosition());
            GameLogic::Singleton()->getPView()->addChild(particle,99,Blood_Particle_Tag);
            
            float bloodValue = GameLogic::Singleton()->getBlood();
            GameLogic::Singleton()->setBlood(bloodValue += bloodValue * 0.1);//10%
            CCLOG("+=================Blood Skill Open===============+");
        }
            break;
        case Skill_Sprint:{
            int deltaTime = 2.0f;
            if (_skState == Skill_Sprint)
                deltaTime += 2.0f;
            else
                _skState = Skill_Sprint;
            
            this->setObjRotation(0);
            
            SimpleAudioEngine::sharedEngine()->playEffect(S_SPRINT);
            
            CCParticleSystem* particle = CCParticleSystemQuad::create("Sprint.plist");
            particle->setPosition(ccpAdd(this->getObjPosition(),ccp(30,0)));
            GameLogic::Singleton()->getPView()->addChild(particle,99,Sprint_Tag);

            _standardPoint.x = 200;
            
            this->runAction(CCSequence::create(CCDelayTime::create(deltaTime),
                                               CCCallFuncND::create(this,callfuncND_selector(Role::sprintFunc),this),
                                               NULL));
        }
            break;
        case Skill_Wave:{
            SimpleAudioEngine::sharedEngine()->playEffect(S_WAVE);
            this->deleteObjectsInWave();
            
            CCSprite* waveSpr = CCSprite::createWithSpriteFrameName("Wave.png");
            waveSpr->setScale(0.1f);
            waveSpr->setPosition(ccp(15, 15));
            CCSpawn* spawnAction = CCSpawn::create(CCScaleTo::create(0.5f, 1.5f),
                                                   CCFadeOut::create(0.5f),
                                                   NULL);
            CCSequence* sequceceAction = CCSequence::create(spawnAction,
                                                            CCCallFuncND::create(this, callfuncND_selector(Role::waveFunc),this),
                                                            NULL);
            CCSpeed* aSpeed = CCSpeed::create(sequceceAction, 2.5f);
            waveSpr->runAction(aSpeed);
            this->addChild(waveSpr,99,Wave_Tag);

        }
            break;
        default:
            break;
    }
}
예제 #2
0
void TestParticle::initRain()
{
	CCParticleSystem *emitter = CCParticleRain::create();
	emitter->retain();
	addChild(emitter, 10);

	CCPoint p = emitter->getPosition();
	emitter->setPosition( ccp( p.x, p.y-100) );
	emitter->setLife(4);

	emitter->setTexture( CCTextureCache::sharedTextureCache()->addImage("fire.png") );
	emitter->setPosition(ccp(400,50));

	emitter->release();

}
예제 #3
0
void ParticlePerformTest4::doTest()
{
    CCSize s = CCDirector::sharedDirector()->getWinSize();
    CCParticleSystem *particleSystem = (CCParticleSystem*) getChildByTag(kTagParticleSystem);

    // duration
    particleSystem->setDuration(-1);

    // gravity
    particleSystem->setGravity(ccp(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(ccp(s.width/2, 100));
    particleSystem->setPosVar(ccp(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
    ccColor4F startColor = {0.5f, 0.5f, 0.5f, 1.0f};
    particleSystem->setStartColor(startColor);

    ccColor4F startColorVar = {0.5f, 0.5f, 0.5f, 1.0f};
    particleSystem->setStartColorVar(startColorVar);

    ccColor4F endColor = {0.1f, 0.1f, 0.1f, 0.2f};
    particleSystem->setEndColor(endColor);

    ccColor4F 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);

}
예제 #4
0
void ParticleLayer::gravityShock(CCObject *pdata)
{
	CCDictionary *dict = dynamic_cast<CCDictionary*>(pdata);
	float x = dynamic_cast<CCFloat*>(dict->objectForKey("x"))->getValue();
	float y = dynamic_cast<CCFloat*>(dict->objectForKey("y"))->getValue();

	CCParticleSystem *emitter = createExplodingRing();
	emitter->setPosition(ccp(x, y));
}
예제 #5
0
IntervalLayer::IntervalLayer()
{
	m_time0 = m_time1 = m_time2 = m_time3 = m_time4 = 0.0f;

	CCSize s = CCDirector::sharedDirector()->getWinSize();
	// sun
	CCParticleSystem* sun = CCParticleSun::node();
    sun->setTexture(CCTextureCache::sharedTextureCache()->addImage("Images/fire.png"));
	sun->setPosition( CCPointMake(s.width-32,s.height-32) );

	sun->setTotalParticles(130);
	sun->setLife(0.6f);
	this->addChild(sun);

	// timers
    m_label0 = CCLabelBMFont::labelWithString("0", "fonts/bitmapFontTest4.fnt");
	m_label1 = CCLabelBMFont::labelWithString("0", "fonts/bitmapFontTest4.fnt");
	m_label2 = CCLabelBMFont::labelWithString("0", "fonts/bitmapFontTest4.fnt");
	m_label3 = CCLabelBMFont::labelWithString("0", "fonts/bitmapFontTest4.fnt");
    m_label4 = CCLabelBMFont::labelWithString("0", "fonts/bitmapFontTest4.fnt");

    scheduleUpdate();
	schedule(schedule_selector(IntervalLayer::step1));
	schedule(schedule_selector(IntervalLayer::step2), 0);
	schedule(schedule_selector(IntervalLayer::step3), 1.0f);
    schedule(schedule_selector(IntervalLayer::step4), 2.0f);

    m_label0->setPosition(CCPointMake(s.width*1/6, s.height/2));
	m_label1->setPosition(CCPointMake(s.width*2/6, s.height/2));
	m_label2->setPosition(CCPointMake(s.width*3/6, s.height/2));
	m_label3->setPosition(CCPointMake(s.width*4/6, s.height/2));
    m_label4->setPosition(CCPointMake(s.width*5/6, s.height/2));

    addChild(m_label0);
	addChild(m_label1);
	addChild(m_label2);
	addChild(m_label3);
    addChild(m_label4);

	// Sprite
	CCSprite* sprite = CCSprite::spriteWithFile(s_pPathGrossini);
	sprite->setPosition( CCPointMake(40,50) );
	
	CCJumpBy* jump = CCJumpBy::actionWithDuration(3, CCPointMake(s.width-80,0), 50, 4);
	
	addChild(sprite);
	sprite->runAction( CCRepeatForever::actionWithAction(
															(CCActionInterval*)(CCSequence::actions(jump, jump->reverse(), NULL ))
														)
					 );
	// pause button
	CCMenuItem* item1 = CCMenuItemFont::itemFromString("Pause", this, menu_selector(IntervalLayer::onPause) );
	CCMenu* menu = CCMenu::menuWithItems(item1, NULL);
	menu->setPosition( CCPointMake(s.width/2, s.height-50) );

	addChild( menu );
}
void HelloWorld::createParticleEffect(const char* filename, float x, float y, ccColor4F startColor, float duration, float endSize) {
     CCParticleSystem* emitter = CCParticleSystemQuad::create(filename);
     emitter->setPosition(x,y);
     emitter->setStartColor(startColor);
     emitter->setDuration(duration);
     emitter->setEndSize(endSize);
     emitter->setAutoRemoveOnFinish(true);
     addChild(emitter, 10);
}
예제 #7
0
void CCDisplayFactory::updateParticleDisplay(CCBone *bone, CCNode *display, float dt, bool dirty)
{
    CCParticleSystem *system = (CCParticleSystem *)display;
    CCBaseData node;
    CCTransformHelp::matrixToNode(bone->nodeToArmatureTransform(), node);
    system->setPosition(node.x, node.y);
    system->setScaleX(node.scaleX);
    system->setScaleY(node.scaleY);
    system->update(dt);
}
예제 #8
0
void CS_DISPLAY_PARTICLE_UPDATE(Bone *bone, DecorativeDisplay *decoDisplay, float dt, bool dirty)
{
	CCParticleSystem *system = (CCParticleSystem*)decoDisplay->getDisplay();
	Node node;
	TransformHelp::matrixToNode(bone->nodeToArmatureTransform(), node);
	system->setPosition(node.x, node.y);
	system->setScaleX(node.scaleX);
	system->setScaleY(node.scaleY);
	system->update(dt);
}
예제 #9
0
void TestParticle::initFlower()
{
	CCParticleSystem *emitter = CCParticleFlower::create();
	emitter->retain();
	addChild(emitter,10);
//	emitter->setStartSize(20.f);
	emitter->setSpeed(100.f);
	emitter->setTexture(CCTextureCache::sharedTextureCache()->addImage("stars.png"));
	emitter->setPosition(ccp(size.width/6*1,size.height-250));
	emitter->release();
}
예제 #10
0
void TestParticle::initSpiral()
{
	CCParticleSystem *emitter = CCParticleSpiral::create();
	emitter->retain();

	addChild(emitter,10);
	emitter->setTexture(CCTextureCache::sharedTextureCache()->addImage("fire.png"));

	emitter->setPosition(ccp(250,50));
	emitter->release();
}
예제 #11
0
void TestParticle::initSun()
{
	CCParticleSystem *emitter = CCParticleSun::create();
	emitter->retain();
	addChild(emitter,10);
	emitter->setStartSize(20.f);
	emitter->setSpeed(50.f);
	emitter->setTexture(CCTextureCache::sharedTextureCache()->addImage("fire.png"));
	emitter->setPosition(ccp(size.width/6*4,size.height-85));
	emitter->release();
}
예제 #12
0
void TestParticle::initFirework()
{
	CCParticleSystem *emitter = CCParticleFireworks::create();
	emitter->retain();
	addChild(emitter,10);
	emitter->setStartSize(20.0f);
	emitter->setSpeed(150.0f);
	emitter->setTexture(CCTextureCache::sharedTextureCache()->addImage("stars.png"));
	//emitter->setDuration(5.0f);
	emitter->setPosition(ccp(size.width/6*2,size.height-150));
	emitter->release();

}
예제 #13
0
void TestParticle::initExplosion()
{
	CCParticleSystem *emitter = CCParticleExplosion::create();
	emitter->retain();
	addChild(emitter, 10);

	emitter->setTexture( CCTextureCache::sharedTextureCache()->addImage("stars.png") );

	emitter->setAutoRemoveOnFinish(true);

	emitter->setPosition(ccp(400,50));
	emitter->release();
}
예제 #14
0
void TestParticle::initSmoke()
{
	CCParticleSystem *emitter = CCParticleSmoke::create();
	emitter->retain();
	this->addChild(emitter, 10);
	emitter->setStartSize(20.0f);
	//emitter->setTotalParticles(300);
	emitter->setSpeed(150.0f); //设置速度
	emitter->setTexture( CCTextureCache::sharedTextureCache()->addImage("fire.png") ); //设置图片
	//emitter->setDuration(5.0f); //设置时间
	emitter->setPosition(ccp(size.width/6,size.height-150)); //设置初始位置
	emitter->release();

}
예제 #15
0
void TestParticle::initSnow()
{
	CCParticleSystem *emitter = CCParticleSnow::create();
	emitter->retain();
	addChild(emitter, 10);

	CCPoint p = emitter->getPosition();
	emitter->setPosition( ccp( p.x, p.y-110) );
	emitter->setLife(3);
	emitter->setLifeVar(1);

	// gravity
	emitter->setGravity(ccp(0,-10));

	// speed of particles
	emitter->setSpeed(130);
	emitter->setSpeedVar(30);


	ccColor4F startColor = emitter->getStartColor();
	startColor.r = 0.9f;
	startColor.g = 0.9f;
	startColor.b = 0.9f;
	emitter->setStartColor(startColor);

	ccColor4F startColorVar = emitter->getStartColorVar();
	startColorVar.b = 0.1f;
	emitter->setStartColorVar(startColorVar);

	emitter->setEmissionRate(emitter->getTotalParticles()/emitter->getLife());

	emitter->setTexture( CCTextureCache::sharedTextureCache()->addImage("snow.png"));

	emitter->setPosition(ccp(0,480));
	emitter->release();
}
예제 #16
0
void HelloWorld::ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent)
{
	CCNode* node = this->getChildByTag(TileMapNode);	
	//NSAssert([node isKindOfClass:[CCTMXTiledMap class]], @"not a CCTMXTiledMap");
	CCTMXTiledMap* tileMap = (CCTMXTiledMap*)node;
	
	// get the position in tile coordinates from the touch location
	CCPoint touchLocation = this->locationFromTouch((cocos2d::CCTouch *)pTouches->anyObject());	
	CCPoint tilePos = this->tilePosFromLocation(touchLocation, tileMap);	

	//// move tilemap so that touched tiles is at center of screen
	this->centerTileMapOnTileCoord(tilePos, tileMap);

	// Check if the touch was on water (eg. tiles with isWater property drawn in GameEventLayer)
	bool isTouchOnWater = false;	
	CCTMXLayer* eventLayer = tileMap->layerNamed("GameEventLayer");
	int tileGID = eventLayer->tileGIDAt(tilePos);	
	//
	if (tileGID != 0) {
		CCDictionary* properties = tileMap->propertiesForGID(tileGID);
		if (properties) {
			//CCLOG(@"NSDictionary 'properties' contains:\n%@", properties);	
			const CCString * isWaterProperty = properties->valueForKey("isWater");
			isTouchOnWater = isWaterProperty->boolValue();			
		}
	}
	
	// Check if the touch was within one of the rectangle objects
	CCTMXObjectGroup* objectLayer = tileMap->objectGroupNamed("ObjectLayer");
	//NSAssert([objectLayer isKindOfClass:[CCTMXObjectGroup class]], 
	//		 @"ObjectLayer not found or not a CCTMXObjectGroup");
	
	bool isTouchInRectangle = false;
	int numObjects = objectLayer->getObjects()->count();
	for (int i = 0; i < numObjects; i++){
		CCDictionary* properties = (CCDictionary*)objectLayer->getObjects()->objectAtIndex(i);
		CCRect rect = this->getRectFromObjectProperties(properties, tileMap);
		//	
		if (CCRect::CCRectContainsPoint(rect, touchLocation)) {
			isTouchInRectangle = true;
			break;
		}
	}
	
	// decide what to do depending on where the touch was ...
	if (isTouchOnWater) {
		//[[SimpleAudioEngine sharedEngine] playEffect:@"alien-sfx.caf"];
		CCLog("touchOnWater");
	}
	else if (isTouchInRectangle) {
		CCLog("touchObject");
		CCParticleSystem* system = CCParticleSystemQuad::particleWithFile("fx-explosion.plist");
		system->setAutoRemoveOnFinish(true);
		system->setPosition(touchLocation);
		this->addChild(system, 1);
	}
	else {

#if 0
		// get the winter layer and toggle its visibility
		CCTMXLayer* winterLayer = tileMap->layerNamed("WinterLayer");
		winterLayer->setVisible(!winterLayer->isVisible());
		
		// other options you might be interested in are:	

		// remove the touched tile		
		winterLayer->removeTileAt(tilePos);		
		// add a specific tile
		tileGID = winterLayer->tileGIDAt(CCPointMake(0, 19));
		winterLayer->setTileGID(tileGID, tilePos);
#endif

	}
}
void HelloWorld::createParticleEffect(const char* filename, float x, float y) {
     CCParticleSystem* emitter = CCParticleSystemQuad::create(filename);
     emitter->setPosition(x,y);
     emitter->setAutoRemoveOnFinish(true);
     addChild(emitter, 10);
}
예제 #18
0
void ccbLoginEDLayer::onNodeLoaded(cocos2d::CCNode * pNode,  cocos2d::extension::CCNodeLoader * pNodeLoader) 
{
	s_pccbLoginEDLayer = this;
	m_pPrizeBoard = pNode->getChildByTag(102);

	m_pBoard = pNode->getChildByTag(101);
	m_pBoard->setZOrder(5);
	CCSprite* pBG = CCSprite::create("tu16/zhuanpan/limian.png");
	pBG->setPosition( CCPoint(d_iBgLocation) );
	m_pBoard->addChild(pBG, -5);

	m_pLayer = CSizeLayer::createWithSize(CCSize(424, 138/*800, 480*/));
	m_pLayer->setPosition(ccp(106,160));
	m_pBoard->addChild(m_pLayer, -1);

	for (int i = 0; i < 2; i++ )
	{
		m_pBar[i] = CCSprite::create("tu16/zhuanpan/pao.png");
		m_pBar[i]->setPosition( ccp(d_iBarX-i*d_iBar, d_iLocationY) );
		m_pBar[i]->setAnchorPoint( ccp(0,0) );
		m_pLayer->addChild(m_pBar[i], -2);
	}

	CCParticleSystem* pParticle = CCParticleSystemQuad::create("tu16/zhuanpan/beihou.plist");
	pParticle->setAnchorPoint(ccp(0.5f, 0.5f));
	pParticle->setPosition( CCPoint(d_iLocationX(1), 75) );
	m_pLayer->addChild(pParticle, -2);

	CCSprite* pSprite = CCSprite::create("tu16/zhuanpan/xuanzhong1.png");	
	CCArray* animFrames = CCArray::createWithCapacity(2);
	{
		CCSpriteFrame* frame = CCSpriteFrame::create("tu16/zhuanpan/xuanzhong1.png",CCRect(0, 0, d_iGridWH));
		animFrames->addObject(frame);
	}
	{
		CCSpriteFrame* frame = CCSpriteFrame::create("tu16/zhuanpan/xuanzhong2.png",CCRect(0, 0, d_iGridWH));
		animFrames->addObject(frame);
	}
	CCAnimation* pAnimation  = CCAnimation::createWithSpriteFrames(animFrames, 0.1f);
	pSprite->runAction( CCRepeatForever::create(CCAnimate::create(pAnimation)) );
	pSprite->setAnchorPoint(ccp(0.5f, 0.5f));
	pSprite->setPosition( ccp(d_iLocationX(1), 75) );
	m_pLayer->addChild(pSprite, -2);
	//m_pStarAnimation->retain();

	CCNode* pLoginDayBoard = pNode->getChildByTag(103);
	for ( int i = 0; i < 3 - AppDelegate::s_PrizeDayNum; i++ )
	{
		CCSprite* pSprite = CCSprite::create("tu16/an.png");
		pSprite->setPosition(ccp(_DayX[i], _DayY[i]));
		pLoginDayBoard->addChild(pSprite);
	}
	if ( AppDelegate::s_WeaponOwn[7] )
	{//以后
		CCSprite* pSprite2 = CCSprite::create("tu16/qian.png");
		pSprite2->setPosition(ccp(141, 70));
		pLoginDayBoard->addChild(pSprite2);
		CCSprite* pSprite1 = CCSprite::create("tu16/jiangli500.png");
		pSprite1->setPosition(ccp(141, 180));
		pLoginDayBoard->addChild(pSprite1);
	}
	else
	{//第一次
		CCSprite* pSprite3 = CCSprite::create("tu16/qiang1.png");
		//CCScaleTo* pAction1 = CCScaleTo::create(0.5f, 0.8f);
		//CCScaleTo* pAction2 = CCScaleTo::create(0.2f, 1.0f);
		//pSprite3->runAction( CCRepeatForever::create(CCSequence::create(pAction1, pAction2, NULL)) );
		pSprite3->setPosition(ccp(141, 70));
		pLoginDayBoard->addChild(pSprite3);

		CCSprite* pSprite2 = CCSprite::create("tu16/qiang2.png");
		pSprite2->setAnchorPoint(ccp(0.8f, 0.2f));
		CCScaleTo* pAction1 = CCScaleTo::create(0.5f, 1.3f);
		CCScaleTo* pAction2 = CCScaleTo::create(0.2f, 1.0f);
		CCDelayTime* pAction3 = CCDelayTime::create(1.5f);
		pSprite2->runAction( CCRepeatForever::create(CCSequence::create(pAction1, pAction2, pAction3, NULL)) );
		pSprite2->setPosition(ccp(168, 33));
		pLoginDayBoard->addChild(pSprite2);

		CCSprite* pSprite1 = CCSprite::create("tu16/santian.png");
		pSprite1->setPosition(ccp(145, 180));
		pLoginDayBoard->addChild(pSprite1);
	}

	{
		CCNodeLoaderLibrary* ccNodeLoaderLibrary = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary();
		ccNodeLoaderLibrary->registerCCNodeLoader("ccbGetPrizeLayer", ccbGetPrizeLayerLoader::loader());
		cocos2d::extension::CCBReader* ccbReader = new cocos2d::extension::CCBReader(ccNodeLoaderLibrary);
		m_pGetPrize = (ccbGetPrizeLayer*)ccbReader->readNodeGraphFromFile("23.ccbi"/*, this*/);
		m_pGetPrize->setAnimationManager(ccbReader->getAnimationManager());
		m_pGetPrize->setPosition(ccp(0,0));
		addChild(m_pGetPrize, 5);
		ccbReader->release();
	}

	setVisible(false);
}
예제 #19
0
void TestParticle::initRotFlower()
{
	CCParticleSystem *emitter = new CCParticleSystemQuad();
	emitter->initWithTotalParticles(300);
	//emitter->autorelease();
	addChild(emitter);
	////emitter->release();    // win32 : Remove this line
	emitter->setTexture( CCTextureCache::sharedTextureCache()->addImage("stars2.png"));

	// duration
	emitter->setDuration(-1);

	// gravity
	emitter->setGravity(CCPointZero);

	// angle
	emitter->setAngle(90);
	emitter->setAngleVar(360);

	emitter->setSpeed(160);
	emitter->setSpeedVar(20);

	// radial
	emitter->setRadialAccel(-120);
	emitter->setRadialAccelVar(0);

	// tagential
	emitter->setTangentialAccel(30);
	emitter->setTangentialAccelVar(0);

	// emitter position
	emitter->setPosition( ccp(160,240) );
	emitter->setPosVar(CCPointZero);

	// life of particles
	emitter->setLife(3);
	emitter->setLifeVar(1);

	// spin of particles
	emitter->setStartSpin(0);
	emitter->setStartSpinVar(0);
	emitter->setEndSpin(0);
	emitter->setEndSpinVar(2000);

	ccColor4F startColor = {0.5f, 0.5f, 0.5f, 1.0f};
	emitter->setStartColor(startColor);

	ccColor4F startColorVar = {0.5f, 0.5f, 0.5f, 1.0f};
	emitter->setStartColorVar(startColorVar);

	ccColor4F endColor = {0.1f, 0.1f, 0.1f, 0.2f};
	emitter->setEndColor(endColor);

	ccColor4F endColorVar = {0.1f, 0.1f, 0.1f, 0.2f};
	emitter->setEndColorVar(endColorVar);

	// size, in pixels
	emitter->setStartSize(30.0f);
	emitter->setStartSizeVar(00.0f);
	emitter->setEndSize(kParticleStartSizeEqualToEndSize);

	// emits per second
	emitter->setEmissionRate(emitter->getTotalParticles()/emitter->getLife());

	// additive
	emitter->setBlendAdditive(false);

	emitter->setPosition(ccp(size.width/6*5,size.height-250));
	emitter->release();

}
예제 #20
0
void StartScene::update(float dt)
{
    DataModel *m = DataModel::getModel();
    Vector<Projectile*> projectilesToDelete;

    for (int i = 0; i < m->projectiles.size(); i++)
    {
        Projectile* projectile = (Projectile*)(m->projectiles.at(i));
        Rect projectileRect = Rect(projectile->getPositionX() - (projectile->getContentSize().width / 2),
                                   projectile->getPositionY() - (projectile->getContentSize().height / 2),
                                   projectile->getContentSize().width,
                                   projectile->getContentSize().height);
        for (int i = 0; i < m->targets.size(); i++)
        {
            Creep* target = (Creep*)(m->targets.at(i));
            Rect targetRect = Rect(target->getPositionX() - (target->sprite->getContentSize().width / 2),
                                   target->getPositionY() - (target->sprite->getContentSize().height / 2),
                                   target->sprite->getContentSize().width,
                                   target->sprite->getContentSize().height);
            if (projectileRect.intersectsRect(targetRect))
            {
                projectilesToDelete.pushBack(projectile);
                Creep *creep = target;
                creep->curHp -= projectile->power;
                creep->lifeBar->setPercentage(static_cast<float>(creep->curHp*100)/creep->maxHp);
                CocosDenshion::SimpleAudioEngine::getInstance()->playEffect("hit.wav");
                if (creep->curHp <= 0)
                {
//					targetsToDelete.pushBack(creep);
                    m->targets.eraseObject(creep);
                    CCParticleSystem* particleSystem = CCParticleExplosion::create();
                    particleSystem->setTexture(CCTextureCache::sharedTextureCache()->addImage("bullet2.png"));
                    particleSystem->setPosition(creep->getPosition());
                    particleSystem->setScale(0.15);
                    particleSystem->setLife(1);
                    this->addChild(particleSystem);
//                    creep->removeAllChildren();
//                    creep->sprite = Sprite::create("blast7.png");
//                    creep->addChild(creep->sprite,0);
                    this->removeChild(creep,true);
                    CocosDenshion::SimpleAudioEngine::getInstance()->playEffect("blast.wav");
                    m->currentMoney += creep->bonusMoney;
                    money->setText(to_string(m->currentMoney));
                }
//                for (int i = 0; i < targetsToDelete.size(); i++)
//                {
//                    Creep *target = (Creep*)(targetsToDelete.at(i));
//                    m->targets.eraseObject(target);
//                    this->removeChild(target, true);
//                    CocosDenshion::SimpleAudioEngine::getInstance()->playEffect("blast.wav");
//                }
                break;
            }
        }
    }



    for (int i =0; i < projectilesToDelete.size(); i++)
    {
        Projectile *projectile = (Projectile*)(projectilesToDelete.at(i));
        m->projectiles.eraseObject(projectile);
        this->removeChild(projectile,true);
    }

    if (this->currentLevel==-1&&m->targets.size()==0) {
        //win
        Size visibleSize = Director::getInstance()->getVisibleSize();
        Point origin = Director::getInstance()->getVisibleOrigin();
//        auto winPic = Sprite::create("win.png");
//        winPic->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
////        winPic->setScale(2);
//        this->addChild(winPic,2);
        widget = dynamic_cast<Layout*>(cocostudio::GUIReader::getInstance()->widgetFromJsonFile("OverUi_1/WinUi_1.json"));
        widget->setPosition(Point(visibleSize.width/2 + origin.x -widget->getContentSize().width/2, visibleSize.height/2 + origin.y - widget->getContentSize().height/2));
        this->addChild(widget,2);
        auto star1 = dynamic_cast<ImageView*>(widget->getChildByName("Star_1"));
        auto star2 = dynamic_cast<ImageView*>(widget->getChildByName("Star_2"));
        auto star3 = dynamic_cast<ImageView*>(widget->getChildByName("Star_3"));
        auto restartButton = dynamic_cast<Button*>(widget->getChildByName("RestartBTN"));
        auto continueButton = dynamic_cast<Button*>(widget->getChildByName("ContinueBTN"));
        restartButton->addTouchEventListener(this, toucheventselector(StartScene::restartEvent));
        continueButton->addTouchEventListener(this, toucheventselector(StartScene::continueEvent));
        if (m->home->homeHP>=1&& m->home->homeHP<=3) {
            star2->setVisible(false);
            star3->setVisible(false);
        } else if (m->home->homeHP>=4&&m->home->homeHP<=9) {
            star3->setVisible(false);
        }
        this->cleanup();
    }

}
예제 #21
0
void ADParticleSystemCache::playParticleSystem( const char *pFileName, const CCPoint &pos )
{
	CCParticleSystem *pPart = addParticleSystem( pFileName );
	pPart->setPosition( pos );
	pPart->resetSystem();
}
예제 #22
0
void StartScene::FollowPath(Node *sender)
{
    DataModel *m = DataModel::getModel();
    Creep* creep = (Creep *)sender;
    WayPoint* curWaypoint = creep->getCurrentWaypoint();
    WayPoint* waypoint = creep->getNextWaypoint();
    if (waypoint!=nullptr) {
        Point moveVector = waypoint->getPosition()-curWaypoint->getPosition();
        float angle = ccpToAngle(moveVector);
        float cocosAngle = CC_RADIANS_TO_DEGREES(angle);
//        std::ostringstream text("angle = ");
//        text<<std::to_string(cocosAngle)<<" curPoint("<<std::to_string(curWaypoint->getPosition().x)<<","<<std::to_string(curWaypoint->getPosition().y)<<") nextPoint("<<std::to_string(waypoint->getPosition().x)<<","<<std::to_string(waypoint->getPosition().y)<<")";
//        log(text.str().c_str());
        if (cocosAngle==0) {
            if (creep->inverse) {
                cocosAngle += 180;
                creep->lifeBar->setPosition(creep->sprite->getPosition().x, creep->sprite->getPosition().y-60);
            } else
                creep->lifeBar->setPosition(creep->sprite->getPosition().x, creep->sprite->getPosition().y+60);
            creep->emptyLifeBar->setPosition(creep->lifeBar->getPosition());
        } else if(cocosAngle==180) {
            if (creep->inverse) {
                cocosAngle += 180;
                creep->lifeBar->setPosition(creep->sprite->getPosition().x, creep->sprite->getPosition().y+60);
            } else
                creep->lifeBar->setPosition(creep->sprite->getPosition().x, creep->sprite->getPosition().y-60);
            creep->emptyLifeBar->setPosition(creep->lifeBar->getPosition());
        } else {
            if (!creep->inverse)
                cocosAngle += 180;
        }
        sender->setRotation(cocosAngle);
        int moveDuration = creep->moveDuration;
        auto actionMove = MoveTo::create(moveDuration, waypoint->getPosition());
        auto actionMoveDone = CallFuncN::create(this, callfuncN_selector(StartScene::FollowPath));
        creep->stopAllActions();
//        creep->lifeBar->stopAllActions();
        creep->runAction(Sequence::create(actionMove, actionMoveDone, NULL));
//        creep->lifeBar->runAction(Sequence::create(lifeBarActionMove, NULL));
    } else {
        m->home->homeHP--;
        life->setText(to_string(m->home->homeHP));
        CocosDenshion::SimpleAudioEngine::getInstance()->playEffect("blast.wav");
        m->targets.eraseObject(creep);
        this->removeChild(creep);
        CCParticleSystem* particleSystem = CCParticleExplosion::create();
        particleSystem->setTexture(CCTextureCache::sharedTextureCache()->addImage("bullet2.png"));
        particleSystem->setPosition(creep->getPosition());
        particleSystem->setScale(0.15);
        particleSystem->setLife(1);
        this->addChild(particleSystem);
        if (m->home->homeHP<=0) {
            m->home->removeAllChildren();
            m->home->sprite = Sprite::create("destroy.png");
            m->home->sprite->setScale(0.7);
            m->home->addChild(m->home->sprite,0);
            Size visibleSize = Director::getInstance()->getVisibleSize();
            Point origin = Director::getInstance()->getVisibleOrigin();
            auto losePic = Sprite::create("over.png");
            losePic->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
            this->addChild(losePic,3);
            widget = dynamic_cast<Layout*>(cocostudio::GUIReader::getInstance()->widgetFromJsonFile("OverUi_1/LoseUi_1.json"));
            widget->setPosition(Point(visibleSize.width/2 + origin.x -widget->getContentSize().width/2, visibleSize.height/2 + origin.y - widget->getContentSize().height/2));
            this->addChild(widget,2);
            auto restartButton = dynamic_cast<Button*>(widget->getChildByName("RestartBTN"));
            auto mainMenuButton = dynamic_cast<Button*>(widget->getChildByName("MainMenuBTN"));
            restartButton->addTouchEventListener(this, toucheventselector(StartScene::restartEvent));
            mainMenuButton->addTouchEventListener(this, toucheventselector(StartScene::mainMenuEvent));
            this->cleanup();
        } else {
            std::string home = to_string(m->home->homeHP) + ".png";
            m->home->removeAllChildren();
            m->home->sprite = Sprite::create(home);
            m->home->sprite->setScale(0.7);
            m->home->addChild(m->home->sprite,0);
        }
    }
}