예제 #1
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();
}
void ScreenEffectsManager::startShaking(float duration, float amount) {
	startEffect(SHAKING_EFFECT, duration, amount);
}
예제 #3
0
파일: main.cpp 프로젝트: igneus/particled
int main(int argc, char* argv[])
{
  logger = new Logger();

  // parse options; set some defaults; control required ones
  parseOptions(argc, argv, options);

  if (options.printHelpAndExit) {
    printHelp();
    return(0);
  }

  if (options.effectX == 0)
    options.effectX = options.winWidth / 2;
  if (options.effectY == 0)
    options.effectY = options.winHeight / 2;
  if (options.effectFile.empty()) {
    logger->error("Please, specify particle effect definition file.");
    return(1);
  }

  PHYSFS_init(argv[0]);

  logger->log("-> initialize engine");
  initEngine();

  effectViewer->setEffectPosition(options.effectX, options.effectY);
  effectViewer->setBackgroundColour(options.backgroundColour);

  startEffect();

  logger->log("-> game loop");

  SDL_Event event;
  bool quit = false;

  // event loop
  while (true) {
    while (SDL_PollEvent(&event)) {
      if (event.type == SDL_QUIT) {
	quit = true;
      } else if (event.type == SDL_KEYDOWN) {
	switch (event.key.keysym.sym) {
	case SDLK_ESCAPE:
	case SDLK_q:
	  quit = true;
	case SDLK_r:
	  // start new effect
	  startEffect();
	  break;
	case SDLK_n:
	  // delete all particles and start new effect
	  effectViewer->cleanParticles();
	  startEffect();
	  break;
	}
      }
    }

    // std::cout << m->getNumSprites() << std::endl;

    gui->logic();
    gui->draw();
    graphics->updateScreen();

    // end if particle effect has ended
    if (effectViewer->isEffectOver()) {
      if (options.quitOnEffectEnd) {
	quit = true;
      } else if (options.loop) {
	startEffect();
      }
    }

    if (quit) {
      break;
    }

    SDL_Delay(10);
  }

  logger->log("-> game loop ended");

  logger->log("-> exit engine");
  exitEngine();

  logger->log("-> done.");

  delete logger;

  PHYSFS_deinit();
  return(0);
}