SFML community forums

Help => Graphics => Topic started by: nisse pisse on June 01, 2010, 09:29:32 pm

Title: Help with scrolling background
Post by: nisse pisse on June 01, 2010, 09:29:32 pm
Hello.
So i want a scrolling background. I get the background to scroll fine there is just one problem, there is a pixel gap.

http://data.fuskbugg.se/skalman01/-help.png



   
Code: [Select]
sf::Sprite bg1(background);
    sf::Sprite bg2(background);
    int bgheight;
    bgheight = 1904;
    bool bgActive1;
    bool bgActive2;
    int bgPosition1;
    int bgPosition2;
    bgPosition1 = 799;
    bg1.SetPosition(0,(bgPosition1-bgheight));
    bgActive1 = true;
    bgActive2 = false;


 // Start the game loop
     while (App.IsOpened())
     {
         if(App.GetFrameTime() < 0.0167){
             Sleep((0.0167-App.GetFrameTime())*1000);
         }
         // Process events
   

         if(bgActive1 == true){

             bgPosition1 = bgPosition1 + 1;
             bg1.SetPosition(0,(-bgheight+ bgPosition1));
         }
          if(bgActive2 == true ){

             bgPosition2 = bgPosition2 + 1;
             bg2.SetPosition(0,(-bgheight+ bgPosition2));
         }
          if((-bgheight+ bgPosition1) == 0 && bgActive1 == true){
                  bgActive2 = true;
                  bgPosition2 = 0;
                 bg2.SetPosition(0,-bgheight+ bgPosition1);

          }
     //     if((-bgheight)+ bgPosition1 == 800 && bgActive1 == true){
      //           bgActive1 = false;
       //      }
        if((-bgheight+ bgPosition2) == 0 && bgActive2 == true){
                  bgActive1 = true;
                  bgPosition1 = 0;
                 bg1.SetPosition(0,-bgheight+ bgPosition2);

          }
       //   if((-bgheight)+ bgPosition2 == 800 && bgActive2 == true){
        //         bgActive2 = false;
         //    }


/ Clear screen
         App.Clear();

       
            if(bgActive1 == true){
           App.Draw(bg1);
           }
           if(bgActive2 == true){
          App.Draw(bg2);
           }

           if(bgActive2 == true && bgActive1 == true){
               m++;
               if(m == 5){
               cout << endl << bgPosition1 << endl;
               cout << bgPosition2 << endl;

           }
           }

                   // Draw the string
        // App.Draw(Text);

         // Update the window
         App.Display();


     }

     return EXIT_SUCCESS;
 }


The picture is 1904 pixels in the y axis

I dont see where my thinking fails...
Title: Help with scrolling background
Post by: Skomakar'n on June 16, 2010, 06:45:41 pm
Somebody please answer... I have this problem too, and I see no reason for it not to work. Does the SFML view operate in a different thread? Maybe I should just make my own view system in the same thread... Or is there a way to wait for the thread before the screen is redrawn?
Title: Help with scrolling background
Post by: kitchen on June 16, 2010, 09:15:08 pm
This person (http://sfml-dev.org/forum/viewtopic.php?t=2417) was having the same problem as you. It seems that the solution is to sf::Image::SetSmooth(false) when loading it.
Title: Help with scrolling background
Post by: Skomakar'n on June 17, 2010, 01:43:06 am
Yeah, I found it myself. Was just about to post about it.
Hopefully OP will have use of your answer.
Title: Help with scrolling background
Post by: nisse pisse on June 24, 2010, 10:11:18 am
Yes it was that "set smooth" was set to true... one might wonder why that is the defualt setup when it works so bad O_o
Title: Help with scrolling background
Post by: Ashenwraith on June 25, 2010, 04:07:21 am
Quote from: "nisse pisse"
Yes it was that "set smooth" was set to true... one might wonder why that is the defualt setup when it works so bad O_o


It's a bug that's been fixed with SFML 2.

Smooth is the default because smooth image filtering is considered standard in most modern apps--ie non 8-bit games.