User Tools

Site Tools


didattici:esempio4sfml

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
didattici:esempio4sfml [2019/12/31 19:31] profprodidattici:esempio4sfml [2020/06/08 22:20] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +=====Esempio 4 con sfml (cpp)=====
  
 +NOTA: RISPETTO A [[didattici:esempio3sfml]], si fa uso di sleep per risparmiare CPU
 +
 +  * prima di compilare è necessario installare i pacchetti elencati nella pagina [[didattici:sfml#linguaggio_c_plus_plus|sfml]] 
 +  * poi è necessario mettere nella stessa cartella una piccola immagine **assi.png** (200x200) {{ :didattici:assi.png?direct |esempio di assi cartesiani con asse y diretto in basso}}
 +  * poi per compilare <code>  g++ esempio4.cpp -lsfml-graphics -lsfml-system -lsfml-window </code>
 +
 +<file cpp esempio4.cpp >
 +
 +#include <SFML/System/Time.hpp>
 +int main()
 +{
 + const sf::Time TimePerFrame = sf::seconds(1.f/20.f); //
 + const sf::Time TimeSleep = sf::seconds(1.f/(20*4.f)); //lo sleep deve durare meno di un frame. Altrimenti perdo un frame
 +
 +    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");    
 +    sf::View fixedView = window.getView(); 
 +    sf::Texture texture;
 +    texture.loadFromFile("assi.png");
 +    sf::Sprite spriteSfondo(texture);
 +
 +    sf::VertexArray linea(sf::Lines,2);
 +
 +    linea[0].position.x=10.f;
 +    linea[0].position.y=10.f; // x1,y1
 +    linea[0].color=sf::Color::Green;
 +    linea[1].position.x=150.f;
 +    linea[1].position.y=150.f; // x2,y2
 +    linea[1].color=sf::Color::Green;
 +
 +
 + sf::Clock clock; // non è nell'heap, ma è comunque costruito
 + sf::Time tempoAccumulato = sf::Time::Zero; //azzerato
 +
 +    while (window.isOpen()) // non usa eventi, cliclo attivo, CPU al 100% :(
 +    {
 + sf::Time intervallo = clock.restart(); // esegue due azioni. azzera cronometro e memorizza l'intervallo trascorso
 + tempoAccumulato += intervallo; // incremento totalizzatore( che non si azzera MAI)
 + while (tempoAccumulato > TimePerFrame) // se ho superato il periodo di un frame  0.0167 sec. 
 + // elaboro questo while, altrimenti non entro nel while
 + {
 + tempoAccumulato -= TimePerFrame; // diminuisci un po' il tempo accumulato (se e' passato un solo frame)
 + // ripeti la diminuzioni tante volte per non perdere frame
 + 
 + // dentro il while, mantiene aggiornata la finestra almeno una volta ogni frame.
 + sf::Event event;
 + while (window.pollEvent(event))
 + {
 + if (event.type == sf::Event::Closed)
 + window.close();
 + }
 +
 + window.clear();
 + window.setView(fixedView); 
 + window.draw(spriteSfondo);
 +
 + window.draw(linea);  // segmento
 + //window.draw(shape); // qualsiasi altro oggetto aggiunto sopra
 + window.display();
 + }
 +
 + sf::sleep(TimeSleep);// quando non eseguo il while, riposo.
 +    }
 +
 +    return 0;
 +}
 +
 +</file>
didattici/esempio4sfml.txt · Last modified: 2020/06/08 22:20 by 127.0.0.1