2016-04-06 3 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にはsf :: RenderWindowと同様にgetSize関数があります。単に両方のサイズを取得し、比率を計算し、スプライトのスケールを設定するためにそれを使用して、次のように:

#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

関連する問題