[SFML 2.0] Przeczekiwanie
Ostatnio zmodyfikowano 2013-02-25 13:56
polkom21 Temat założony przez niniejszego użytkownika |
[SFML 2.0] Przeczekiwanie » 2013-02-25 01:16:34 Hej. Mam taki problem. Otóż potrzebuję, aby obraz się zatrzymał po wykonaniu akcji na określony czas i później ruszył dalej. Próbowałem to zrobić przez sf::Clock ale to liczy od startu programu a reset coś dziwnie się zachowuje. Jak mogę zrobić coś takiego? |
|
wojownik266 |
» 2013-02-25 11:34:46 Już od dłuższego czasu trapił mnie ten sam problem. Dzisiaj jak Cię nie było, postanowiłem się z tym problemem zmierzyć sam na sam. Po kilku minutach wyprodukowałem w SFML 1.6 kod programu taki jak widać nieco niżej. Program spełnia zadanie tzn. zatrzymuje się na chwilkę i rusza dalej.... Jednak do gier się raczej nie naddaje, a szkoda... A dlaczego nie to pewnie ktoś to dzisiaj powie!? Mam taką nadzieje. #include <SFML/Graphics.hpp> #include <ctime> #include <windows.h> int main() { sf::RenderWindow App( sf::VideoMode( 800, 600 ), "SFML window" ); sf::Image czer; czer.LoadFromFile( "czer.png" ); sf::Sprite Czer( czer ); float x = 320, y = 240; while( App.IsOpened() ) { sf::Event Event; while( App.GetEvent( Event ) ) { if( Event.Type == sf::Event::Closed ) App.Close(); } clock_t t = 0; t = clock() / CLOCKS_PER_SEC; if(( float ) t >= 5 ) { x += 0.05; if(( float ) t <= 10 && x >= 360 ) Sleep( 10 ); } Czer.SetPosition( x, y ); App.Clear(); App.Draw( Czer ); App.Display(); } return EXIT_SUCCESS; }
|
|
polkom21 Temat założony przez niniejszego użytkownika |
» 2013-02-25 13:44:41 Nie nadaje się to do gier ponieważ to wstrzymuje program a ja potrzebuje na przekład żeby grafika była widoczna przez określony czas . |
|
krzyk |
» 2013-02-25 13:56:53
Po resecie liczy odnowa.
reset coś dziwnie się zachowuje |
Jak?
Trochę kodu na napisanego na szybko.
#include <SFML/Graphics.hpp> #include <iostream> #include <cmath>
using namespace sf; using namespace std;
int main() { RenderWindow window( VideoMode( 640, 480 ), "Duke Nukem 3d" ); window.setFramerateLimit( 60 ); sf::Clock stoper; sf::Clock timer; bool wait = false; float tm = 0; while( window.isOpen() ) { Event event; while( window.pollEvent( event ) ) { if( event.type == Event::Closed ||( event.type == Event::KeyPressed && event.key.code == Keyboard::Escape ) ) window.close(); else if( event.type == Event::MouseButtonPressed ) { timer.restart(); wait = true; } } window.clear( Color( 214, 214, 214, 0 ) ); if( !wait ) tm += stoper.restart().asSeconds(); else stoper.restart(); sf::CircleShape ksztalt( std::sin( tm ) * window.getSize().y / 8 + window.getSize().y / 4 ); ksztalt.setOrigin( sf::Vector2f( ksztalt.getRadius(), ksztalt.getRadius() ) ); ksztalt.setPosition( window.getSize().x / 2.0f, window.getSize().y / 2.0f ); ksztalt.setFillColor( sf::Color::Yellow ); window.draw( ksztalt ); if( wait ) { int t = timer.getElapsedTime().asSeconds(); if( t >= 2 ) wait = false; } window.display(); } return 0; }
|
|
« 1 » |