Chciałem nauczyć się tworzyć przewijany ekran w sfml. Na początku zamierzałem zrobić program tworzący 10 sprajtów, z czego jeden powinien być widoczny na ekranie od początku. Pojawił się jednak problem z tym, że pierwszy sprajt się nie wyświetla.
main.cpp
#include <SFML/Graphics.hpp>
#include <iostream>
#include <vector>
#include <backgroud.h>
int main()
{
float a = -800;
sf::View view(sf::Vector2f(320.f, 200.f), sf::Vector2f(640.f, 400.f));
//*************************************************************************
sf::Texture test; //background texture
test.loadFromFile("test.png"); //loading background texture
std::vector <backgroud*> backrounds; // background
backgroud*wskaz_back;
for(int i = 0; i < 10; i++ ) //load backgrounds in to vector
{
sf::Vector2f xy;
xy.x = 0;
xy.y = i*a;
wskaz_back = new backgroud(test, xy);
backrounds.push_back(wskaz_back);
delete wskaz_back;
}
sf::RenderWindow okno( sf::VideoMode( 640, 400, 32 ), "Gra" ); //render window
while( okno.isOpen() ) //main loop
{
sf::Event zdarzenie;
while( okno.pollEvent( zdarzenie ) ) //event loop
{
if( zdarzenie.type == sf::Event::Closed )
okno.close();
if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape )
okno.close();
}
okno.clear(sf::Color(0, 0, 0)); //clear window
for(int i = 0; i < backrounds.size(); i++) //draw backgrounds
{
okno.draw(backrounds[i]->sprajt);
}
okno.display(); //display window
}
return 0;
}
backgroud.h
#ifndef BACKGROUD_H
#define BACKGROUD_H
#include <SFML/Graphics.hpp>
class backgroud
{
public:
sf::Sprite sprajt;
backgroud(sf::Texture tekstura, sf::Vector2f xy);
protected:
private:
};
#endif // BACKGROUD_H
backkgroud.cpp
#include "backgroud.h"
backgroud::backgroud(sf::Texture tekstura, sf::Vector2f xy)
{
sprajt.setTexture(tekstura);
sprajt.setPosition(xy);
}