예제 #1
0
void SceneGame::GenerationUFO()
{
	float curTimeMillis = getTimeTick();
	if (curTimeMillis > _nextUfoSpawn)
	{
		float randMillisecs = randomValueBetween(0.20, 1.0) * 1000;
		_nextUfoSpawn = randMillisecs + curTimeMillis;

		float randY = randomValueBetween(0.0, winSize.height);
		float randDuration = randomValueBetween(2.0, 10.0);

		Enemy *ufo = _ufos.at(_nextUfo);
		_nextUfo++;

		if (_nextUfo >= _ufos.size())
			_nextUfo = 0;

		ufo->stopAllActions();
		ufo->setPosition(Point(winSize.width + ufo->getContentSize().width / 2, randY));
		ufo->setVisible(true);

		ufo->runAction(Sequence::create(
			MoveBy::create(randDuration, Point(-winSize.width - ufo->getContentSize().width, 0)),
			CallFuncN::create(this, callfuncN_selector(SceneGame::setInvisible)),
			NULL
			));
	}
}
예제 #2
0
void LevelManager::addEnemyToGameLayer(int type)
{
    Size winSize = Director::getInstance()->getWinSize();
    EnemyType enemyType = m_enemyType[type];
    Enemy * enemy = Enemy::create(enemyType);
    
    Vec2 enemyPos = Vec2( 80 + (winSize.width - 160) * CCRANDOM_0_1(), winSize.height);
    Size eSize = enemy->getContentSize();
    enemy->setPosition(enemyPos);
    
    Vec2 offset; //= ((GameLayer*)m_gameLayer)->getShip()->getPosition();
    Action *tempAction; //= CCMoveTo::create(1, offset);
    MoveBy *a0;
    MoveBy *a1;
    CallFuncN *onComplete;
    switch (enemy->getMoveType()) {
        case 0:
            //  直接冲着你过去
            if (((GameLayer*)m_gameLayer)->getShip()) {
                offset = ((GameLayer*)m_gameLayer)->getShip()->getPosition();
            }else{
                offset = Vec2(winSize.width / 2, 0);
            }
            tempAction = MoveTo::create(1, offset);
            break;
            
        case 1:
            offset = Vec2(0, -winSize.height - eSize.height);
            tempAction = MoveBy::create(4, offset);
            break;
            
        case 2:
            offset = Vec2(0, -100 - 200 * CCRANDOM_0_1());
            a0 = MoveBy::create(0.5, offset);
            a1 = MoveBy::create(1, Vec2(-50 - 100 * CCRANDOM_0_1(), 0));
            
            onComplete = CallFuncN::create(CC_CALLBACK_0(LevelManager::repeatAction, this, enemy));
            tempAction = Sequence::create(a0, a1, onComplete, NULL);
            break;
            
        case 3:
            int newX = (enemyPos.x <= winSize.width / 2) ?
                        (winSize.width - enemyPos.x) : -enemyPos.x;
            a0 = MoveBy::create(4, Vec2(newX, -240));
            a1 = MoveBy::create(4, Vec2(-newX, -320));
            tempAction = Sequence::create(a0, a1, NULL);
            break;
    
    }
    
    m_gameLayer->addChild(enemy,enemy->getZOrder());
    enemy_items->addObject(enemy);
    enemy->runAction(tempAction);
}
예제 #3
0
void LevelManager::addEnemyToGamelayer(int type)
{
	CCSize winsize = CCDirector::sharedDirector()->getWinSize();
	EnemyType enemytype = m_enemytype[type];
	Enemy* enemy = Enemy::create(enemytype);

	CCPoint enemyPos = ccp(80+(winsize.width-160)*CCRANDOM_0_1(),winsize.height);
	CCSize esize = enemy->getContentSize();
	enemy->setPosition(enemyPos);

	CCPoint offset;
	CCAction* tmpaction;
	CCMoveBy* a0;
	CCMoveBy* a1;
	CCCallFuncN* oncomplete;

	switch (enemy->getmovetype())
	{
	case 0:
		if (((GameLayer*)m_gamelayer)->getship())
		{
			offset = ((GameLayer*)m_gamelayer)->getship()->getPosition();
		}else
		{
			offset = ccp(winsize.width/2,0);
		}
		tmpaction = CCMoveTo::create(1,offset);
		break;
	case 1:
		offset = ccp(0, -winsize.height-esize.height);
		tmpaction = CCMoveBy::create(4,offset);
		break;
	case 2:
		offset = ccp(0, -100-200*CCRANDOM_0_1());
		a0 = CCMoveBy::create(0.5,offset);
		a1 = CCMoveBy::create(1,ccp(-50-100*CCRANDOM_0_1(),0));
		oncomplete = CCCallFuncN::create(enemy,callfuncN_selector(LevelManager::repeatAction));
		tmpaction = CCSequence::create(a0,a1,oncomplete,NULL);
		break;
	case 3:
		int newx = (enemyPos.x<=winsize.width/2) ? 320 : -320;
		a0 = CCMoveBy::create(4,ccp(newx,-240));
		a1 = CCMoveBy::create(4,ccp(-newx,-320));
		tmpaction = CCSequence::create(a0,a1,NULL);
		break; 
	}

	m_gamelayer->addChild(enemy,enemy->getZOrder(),1000);
	enemy_items->addObject(enemy);
	enemy->runAction(tmpaction);
}