Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/03/2013, 23:53
reethok
 
Fecha de Ingreso: abril-2011
Mensajes: 224
Antigüedad: 13 años
Puntos: 8
¿Alguna idea para optimizar el código?

Estoy usando la librería SFML 2, lo que pasa es que al principio consume aprox 4% del CPU según htop, pero también cuenta que estoy usando una netbook con intel atom.

Cualquier optimización, por más peqieña que sea, me serviría.

Muchas gracias.

Código C++:
Ver original
  1. #include <SFML/Graphics.hpp>
  2. #include <SFML/Audio.hpp>
  3. #include <SFML/System.hpp>
  4.  
  5. int main()
  6. {
  7.     // Ventana en la que se muestra todo el contenido del juego.   
  8.     sf::RenderWindow gameWindow(sf::VideoMode(1024, 600, 32), "Project Genesis",
  9.                                 sf::Style::Fullscreen);
  10.  
  11.     // Se establece el límite de frames por segundo a 60
  12.     gameWindow.setFramerateLimit(60);
  13.  
  14.     enum Boton{NUEVO_JUEGO, CONTINUAR, OPCIONES, SALIR};
  15.     Boton boton = NUEVO_JUEGO;
  16.  
  17.     // Música
  18.     sf::SoundBuffer buffer;
  19.     buffer.loadFromFile("main.wav");
  20.  
  21.     sf::SoundBuffer button;
  22.     button.loadFromFile("button.wav");
  23.  
  24.     sf::SoundBuffer selection;
  25.     selection.loadFromFile("selection.wav");
  26.  
  27.     sf::Sound sound;
  28.     sound.setBuffer(buffer);
  29.     sound.setLoop(true);
  30.  
  31.     sf::Sound buttons;
  32.     buttons.setBuffer(button);
  33.  
  34.     sf::Sound selections;
  35.     selections.setBuffer(selection);
  36.  
  37.     sf::Texture menu_i;
  38.     if(!menu_i.loadFromFile("menu.png"))
  39.         return EXIT_FAILURE;
  40.     sf::Sprite menu_s;
  41.     menu_s.setTexture(menu_i);
  42.  
  43.     sf::Texture nuevo_juego_i;
  44.     if(!nuevo_juego_i.loadFromFile("nuevo_juego.png"))
  45.         return EXIT_FAILURE;
  46.     sf::Sprite nuevo_juego_s;
  47.     nuevo_juego_s.setTexture(nuevo_juego_i);
  48.     nuevo_juego_s.setPosition(700, 225);
  49.  
  50.     sf::Texture nuevo_juego2_i;
  51.     if(!nuevo_juego2_i.loadFromFile("nuevo_juego2.png"))
  52.         return EXIT_FAILURE;
  53.     sf::Sprite nuevo_juego2_s;
  54.     nuevo_juego2_s.setTexture(nuevo_juego2_i);
  55.     nuevo_juego2_s.setPosition(700, 225);
  56.  
  57.     sf::Texture continuar_i;
  58.     if(!continuar_i.loadFromFile("continuar.png"))
  59.         return EXIT_FAILURE;
  60.     sf::Sprite continuar_s;
  61.     continuar_s.setTexture(continuar_i);
  62.     continuar_s.setPosition(700, 275);
  63.  
  64.     sf::Texture continuar2_i;
  65.     if(!continuar2_i.loadFromFile("continuar2.png"))
  66.         return EXIT_FAILURE;
  67.     sf::Sprite continuar2_s;
  68.     continuar2_s.setTexture(continuar2_i);
  69.     continuar2_s.setPosition(700, 275);
  70.  
  71.     sf::Texture opciones_i;
  72.     if(!opciones_i.loadFromFile("opciones.png"))
  73.         return EXIT_FAILURE;
  74.     sf::Sprite opciones_s;
  75.     opciones_s.setTexture(opciones_i);
  76.     opciones_s.setPosition(700, 325);
  77.  
  78.     sf::Texture opciones2_i;
  79.     if(!opciones2_i.loadFromFile("opciones2.png"))
  80.         return EXIT_FAILURE;
  81.     sf::Sprite opciones2_s;
  82.     opciones2_s.setTexture(opciones2_i);
  83.     opciones2_s.setPosition(700, 325);
  84.  
  85.     sf::Texture salir_i;
  86.     if(!salir_i.loadFromFile("salir.png"))
  87.         return EXIT_FAILURE;
  88.     sf::Sprite salir_s;
  89.     salir_s.setTexture(salir_i);
  90.     salir_s.setPosition(700, 375);
  91.  
  92.     sf::Texture salir2_i;
  93.     if(!salir2_i.loadFromFile("salir2.png"))
  94.         return EXIT_FAILURE;
  95.     sf::Sprite salir2_s;
  96.     salir2_s.setTexture(salir2_i);
  97.     salir2_s.setPosition(700, 375);
  98.  
  99.     gameWindow.draw(menu_s);
  100.     gameWindow.draw(nuevo_juego2_s);
  101.     gameWindow.draw(continuar_s);
  102.     gameWindow.draw(opciones_s);
  103.     gameWindow.draw(salir_s);
  104.     gameWindow.display();
  105.  
  106.     sf::Image captura;
  107.     captura = gameWindow.capture();
  108.     captura.saveToFile("captura.png");
  109.    
  110.     sound.play();
  111.  
  112.     // Mientras la ventana esté abierta
  113.     while(gameWindow.isOpen())
  114.     {
  115.         // Ciclo para procesar eventos
  116.  
  117.         // Variable para almacenar los eventos
  118.         sf::Event Event;
  119.  
  120.         while(gameWindow.pollEvent(Event))
  121.         {
  122.             switch (Event.type)
  123.             {
  124.                 case sf::Event::Closed:
  125.                     gameWindow.close();
  126.                     break;
  127.                 case sf::Event::KeyPressed:
  128.                     if(Event.key.code == sf::Keyboard::Escape)
  129.                         gameWindow.close();
  130.                     if(Event.key.code == sf::Keyboard::Up)
  131.                     {
  132.                         buttons.play();
  133.                         switch(boton)
  134.                         {
  135.                             case NUEVO_JUEGO:
  136.                                 boton = SALIR;
  137.                                 break;
  138.                             case CONTINUAR:
  139.                                 boton = NUEVO_JUEGO;
  140.                                 break;
  141.                             case OPCIONES:
  142.                                 boton = CONTINUAR;
  143.                                 break;
  144.                             case SALIR:
  145.                                 boton = OPCIONES;
  146.                                 break;
  147.                         }
  148.                     }
  149.                     if(Event.key.code == sf::Keyboard::Down)
  150.                     {
  151.                         buttons.play();
  152.                         switch(boton)
  153.                         {
  154.                             case NUEVO_JUEGO:
  155.                                 boton = CONTINUAR;
  156.                                 break;
  157.                             case CONTINUAR:
  158.                                 boton = OPCIONES;
  159.                                 break;
  160.                             case OPCIONES:
  161.                                 boton = SALIR;
  162.                                 break;
  163.                             case SALIR:
  164.                                 boton = NUEVO_JUEGO;
  165.                                 break;
  166.                         }
  167.                     }
  168.                     if(Event.key.code == sf::Keyboard::Return)
  169.                     {
  170.                         switch(boton)
  171.                         {
  172.                             case SALIR:
  173.                                 selections.play();
  174.                                 while(selections.getStatus() == sf::SoundSource::Status::Playing)
  175.                                     sf::sleep(sf::milliseconds(1));
  176.                                 gameWindow.close();
  177.                                 break;
  178.                         }
  179.                     }
  180.                 default:
  181.                     break;
  182.             }
  183.  
  184.             // Limpia la pantalla
  185.             gameWindow.clear();
  186.  
  187.             switch(boton)
  188.             {
  189.                 case NUEVO_JUEGO:
  190.                     gameWindow.draw(menu_s);
  191.                     gameWindow.draw(nuevo_juego2_s);
  192.                     gameWindow.draw(continuar_s);
  193.                     gameWindow.draw(opciones_s);
  194.                     gameWindow.draw(salir_s);
  195.                     break;
  196.                 case CONTINUAR:
  197.                     gameWindow.draw(menu_s);
  198.                     gameWindow.draw(nuevo_juego_s);
  199.                     gameWindow.draw(continuar2_s);
  200.                     gameWindow.draw(opciones_s);
  201.                     gameWindow.draw(salir_s);
  202.                     break;
  203.                 case OPCIONES:
  204.                     gameWindow.draw(menu_s);
  205.                     gameWindow.draw(nuevo_juego_s);
  206.                     gameWindow.draw(continuar_s);
  207.                     gameWindow.draw(opciones2_s);
  208.                     gameWindow.draw(salir_s);
  209.                     break;
  210.                 case SALIR:
  211.                     gameWindow.draw(menu_s);
  212.                     gameWindow.draw(nuevo_juego_s);
  213.                     gameWindow.draw(continuar_s);
  214.                     gameWindow.draw(opciones_s);
  215.                     gameWindow.draw(salir2_s);
  216.                     break;
  217.             }
  218.  
  219.             // Redibuja la oantalla
  220.             gameWindow.display();
  221.         }
  222.     }
  223. }

Saludos.