Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.0] Przeczekiwanie

Ostatnio zmodyfikowano 2013-02-25 13:56
Autor Wiadomość
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?
P-76925
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.

C/C++
#include <SFML/Graphics.hpp>
#include <ctime>
#include <windows.h>
int main()
{
    // Create the main window
    sf::RenderWindow App( sf::VideoMode( 800, 600 ), "SFML window" );
    sf::Image czer;
    czer.LoadFromFile( "czer.png" );
    sf::Sprite Czer( czer );
   
    //clock_t t=0;
    //t=clock()/1000;
   
    float x = 320, y = 240;
    // Start the game loop
    while( App.IsOpened() )
    {
        // Process events
        sf::Event Event;
        while( App.GetEvent( Event ) )
        {
            // Close window : exit
            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 );
        // Clear screen
        App.Clear();
       
        // Draw the sprite
        App.Draw( Czer );
       
        // Update the window
        App.Display();
    }
   
    return EXIT_SUCCESS;
}
P-76927
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 .
P-76931
krzyk
» 2013-02-25 13:56:53
liczy od startu programu
Po resecie liczy odnowa.
reset coś dziwnie się zachowuje
Jak?

Trochę kodu na napisanego na szybko.
C/C++
#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();
       
        // kradziony kod xD
        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 ) // 2 sec
                 wait = false;
           
        }
        window.display();
    }
    return 0;
}
P-76934
« 1 »
  Strona 1 z 1