2016-04-06 2 views
0

Только что начал изучать SFML (так что, пожалуйста, несите меня).(2.3.1) Установите масштаб фоновой текстуры на размер окна рендеринга

Я создал объект RenderWindow, и у меня есть изображение, которое я хочу идеально подобрать для этого окна.

Просматривая документацию, я нашел функцию sf :: Sprite :: SetScale. Это правильная функция? Но как установить масштаб спрайта в шкалу RenderWindow, когда размер объекта RenderWindow установлен в пикселях? Должен ли я получить масштаб RenderWindow, а затем назначить фоновый спрайт на этот масштаб или?

#include <SFML/Graphics.hpp> 
#include <SFML/Window.hpp> 
#include <iostream> 

int main() 
{ 
    sf::RenderWindow window(sf::VideoMode(600, 300), "Simple Game"); 

    sf::Texture BackgroundTexture; 
    sf::Sprite background; 

    //background.setScale(0.2, 0.2); <--- how? 

    if(!BackgroundTexture.loadFromFile("media/background.png")) 
    { 
    return -1; 
    } 
    else 
    { 
    background.setTexture(BackgroundTexture); 
    } 

    while(window.isOpen()) 
    { 
    sf::Event event; 

    while(window.pollEvent(event)) 
    { 
     switch(event.type) 
     { 
     case sf::Event::Closed: 
      window.close(); 
     } 
    } 
    window.clear(); 
    window.draw(background); 
    window.display(); 
} 
} 

ответ

1

Необходимый масштабный коэффициент - это просто соотношение между размером окна и размером текстуры. sf :: Texture имеет функцию getSize, как и sf :: RenderWindow. Просто получите размеры обоих, вычислите коэффициент и используйте его, чтобы установить масштаб спрайта, например:

#include <SFML/Graphics.hpp> 
#include <SFML/Window.hpp> 
#include <iostream> 

int main() 
{ 
    sf::RenderWindow window(sf::VideoMode(600, 300), "Simple Game"); 

    sf::Texture BackgroundTexture; 
    sf::Sprite background; 
    sf::Vector2u TextureSize; //Added to store texture size. 
    sf::Vector2u WindowSize; //Added to store window size. 

    if(!BackgroundTexture.loadFromFile("background.png")) 
    { 
    return -1; 
    } 
    else 
    { 
    TextureSize = BackgroundTexture.getSize(); //Get size of texture. 
    WindowSize = window.getSize();    //Get size of window. 

    float ScaleX = (float) WindowSize.x/TextureSize.x; 
    float ScaleY = (float) WindowSize.y/TextureSize.y;  //Calculate scale. 

    background.setTexture(BackgroundTexture); 
    background.setScale(ScaleX, ScaleY);  //Set scale. 
    } 

    while(window.isOpen()) 
    { 
    sf::Event event; 

    while(window.pollEvent(event)) 
    { 
     switch(event.type) 
     { 
      case sf::Event::Closed: 
       window.close(); 
     } 
    } 
    window.clear(); 
    window.draw(background); 
    window.display(); 
} 
} 
+0

Именно то, что я искал, спасибо! – saltcracker

Смежные вопросы