didattici:esempio4sfml
Esempio 4 con sfml (cpp)
NOTA: RISPETTO A esempio3sfml, si fa uso di sleep per risparmiare CPU
- prima di compilare è necessario installare i pacchetti elencati nella pagina sfml
- poi per compilare
g++ esempio4.cpp -lsfml-graphics -lsfml-system -lsfml-window
- 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; }
didattici/esempio4sfml.txt · Last modified: 2020/06/08 22:20 by 127.0.0.1