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

[SFML 1.6] Scrollowanie tła w pionie i poziomie

Ostatnio zmodyfikowano 2012-07-10 11:22
Autor Wiadomość
wojownik266
Temat założony przez niniejszego użytkownika
[SFML 1.6] Scrollowanie tła w pionie i poziomie
» 2012-07-10 11:22:04
Znalazłem w necie kawałek kodu do skrolowania tła w poziomie i zrobiłem z tego mały programik, który prezentuję poniżej. Program przewija tło z małą przerwą pomiędzy zdjęciami. 1. Jak zmodyfikować ten program aby przewijał tło płynnie? 2. I jakie poprawki nanieść aby płynnie przewijał tło w pionie np: z góry do dołu?
Wiem że to mój problem który powinienem sam rozwiązać ale poziom mojej wiedzy o SFML jeszcze mi na to nie pozwala. Są to moje pierwsze kroki...

C/C++
#include <SFML/Graphics.hpp>
#include <vector>
#include <iostream>
using namespace std;

const int SCREEN_H = 480;
const int SCREEN_W = 640;

int main()
{
    sf::RenderWindow App;
    App.Create( sf::VideoMode( SCREEN_W, SCREEN_H ), "SFML_SCROLLING_BACKGROUND" );
    App.SetFramerateLimit( 240 );
    App.UseVerticalSync( false );
   
    vector < sf::Image > zdjecie( 2 );
    vector < sf::Sprite > Background( 2 );
    for( int i = 0; i < 2; ++i )
    if( !zdjecie[ i ].LoadFromFile( "gwiazdy.jpg" ) )
         return EXIT_FAILURE;
   
    for( int i = 0; i < 2; ++i )
    {
        Background[ i ].SetImage( zdjecie[ 0 ] );
        Background[ i ].Resize( SCREEN_W, SCREEN_H );
    }
    // Get elapsed time
    float ElapsedTime = App.GetFrameTime();
    while( App.IsOpened() ) // Start the game loop
    {
       
        // Process events
        sf::Event Event;
        while( App.GetEvent( Event ) )
        {
           
            // Close window : exit
            if( Event.Type == sf::Event::Closed )
                 App.Close();
           
            // Escape key : exit
            if(( Event.Type == sf::Event::KeyPressed ) &&( Event.Key.Code == sf::Key::Escape ) )
                 App.Close();
           
        }
        if(( Background[ 0 ].GetPosition().x + Background[ 0 ].GetSize().x ) < 0 ) //out of screen
        {
            Background[ 0 ].SetPosition( int( Background[ 1 ].GetPosition().x + Background[ 1 ].GetSize().x ), 0 );
            Background[ 1 ].SetPosition( int( Background[ 0 ].GetPosition().x - Background[ 0 ].GetSize().x ), 0 );
            std::cout << Background[ 0 ].GetPosition().x << "\t" << Background[ 1 ].GetPosition().x << "\t CHECK 0" << std::endl;
        }
        if(( Background[ 1 ].GetPosition().x + Background[ 1 ].GetSize().x < 0 ) ) //out of screen
        {
            Background[ 1 ].SetPosition( int( Background[ 0 ].GetPosition().x + Background[ 0 ].GetSize().x ), 0 );
            Background[ 0 ].SetPosition( int( Background[ 1 ].GetPosition().x - Background[ 1 ].GetSize().x ), 0 );
            std::cout << Background[ 1 ].GetPosition().x << "\t" << Background[ 0 ].GetPosition().x << "\t CHECK 1" << std::endl;
        }
       
        //Background[0].Move(100* ElapsedTime,1);
        //Background[1].Move(100* ElapsedTime,1); //scrolling background
        Background[ 0 ].Move( - 1, 0 );
        Background[ 1 ].Move( - 1, 0 );
       
        App.Clear(); // Clear screen
        //Rysuj grafiki
        for( int i = 0; i < 2; ++i )
             App.Draw( Background[ i ] );
        //Rysuj ekran
        App.Display();
    }
    return EXIT_SUCCESS;
}
P-59775
« 1 »
  Strona 1 z 1