void run() { double lastFPSTime = glfwGetTime(); int fps = 0; while (!m_win->shouldClose()) { glfwPollEvents(); double now = glfwGetTime(); m_stateManager.update(); m_stateManager.draw(); m_win->swapBuffers(); if (now - lastFPSTime > 1) { char fpsString[200]; sprintf( fpsString, "Pxljm 2015 [%d FPS @%dx%d]", fps, m_win->width(), m_win->height()); m_win->title(fpsString); fps = 0; lastFPSTime = now; } fps++; } delete m_win; glfwTerminate(); }
int main(int argc, const char* argv[]) { ResourceLoader loader(argv[0] + std::string("\\..\\..\\Resources")); StateManager states; states.setState(std::unique_ptr<MenuScreen>(new MenuScreen(loader))); sf::RenderWindow app(sf::VideoMode(768, 768, 32), "Ethan Game"); app.EnableKeyRepeat(false); sf::Clock clock; double timeForSimulation = 0; while (app.IsOpened()) { sf::Event event; while (app.GetEvent(event)) { switch(event.Type) { case sf::Event::Closed: app.Close(); break; default: states.handleEvent(event); } } timeForSimulation+= clock.GetElapsedTime(); clock.Reset(); while (timeForSimulation >= 1.0/60.0) { states.update(1.0/60.0); timeForSimulation -= 1.0/60; } states.draw(app); app.Display(); } return 0; }
int main() { srand((long)time(0)); //load screen stuff like resolution, sound settings, ETC GameConfiguration gameConfiguration; gameConfiguration.load(); sf::RenderWindow window(sf::VideoMode(DEFAULT_SCREEN_RESOLUTION.x, DEFAULT_SCREEN_RESOLUTION.y), "Contra"); sf::Event event; StateManager stateManager; shared_ptr<GameState> mainMenu = make_shared<GameStateMainMenu>(window, stateManager); if(mainMenu) { stateManager.push(mainMenu); } sf::Clock timer; const sf::Time maxDeltaTime = sf::seconds(0.025); while(window.isOpen()) { while(window.pollEvent(event)) { //handle other window events first if(event.type == sf::Event::Closed) { window.close(); } //window resized so reset default view if(event.type == sf::Event::Resized) { sf::Vector2f newSize(event.size.width, event.size.height); sf::View newView; newView.setSize(newSize); window.setView(newView); } stateManager.handleInputEvents(event, window); } stateManager.handleStateEvents(window); sf::Time delta = timer.restart(); if(delta > maxDeltaTime) { delta = maxDeltaTime; } stateManager.update(delta.asSeconds(), window); window.clear(); stateManager.draw(window); window.display(); if(stateManager.isEmpty()) { //no states left to handle so may as well clsoe the game break; } } //do some cleanup crap }