SFML從入門到放棄(2) 圖像和音頻
精靈
精靈(sf::Sprite)就是截取紋理(sf::Texture)的一塊 或者重復紋理貼圖
初始化精靈和紋理的一些方法:
sf::Sprite init_sprite(const sf::Texture & tex){ sf::Sprite spr; spr.setTexture(tex);//設置紋理 spr.setTextureRect(sf::IntRect(0,0,100,100));//選擇紋理區域 spr.setColor(sf::Color(255,0,0,120));//設置顏色透明度 spr.setPosition(sf::Vector2f(100,100));//設置位置 spr.setRotation(90);//旋轉 spr.setScale(sf::Vector2f(2,2));//設置大小 spr.setOrigin(sf::Vector2f(50,50));//設置中心點 return spr; } sf::Texture init_texture(const std::string &s){ sf::Texture tex;//紋理 if (tex.loadFromFile(s)) std::cout << "texture success\n";//打開圖片作為紋理 s 為圖片路徑 tex.setSmooth(true); //平滑 tex.setRepeated(false); //重復 當選擇的區域大於圖片時是否重復 return tex; }
初始化之后可以對精靈進行操作
spr.move(sf::Vector2f(1,1));//移動 spr.rotate(1);//旋轉 spr.scale(sf::Vector2f(0.9,0.9));//大小
默認的旋轉中心在精靈的左上角 可以通過setOrigin來改變
注意:精靈和對應的紋理要存在於同一個生命周期
通過window.draw()可以在屏幕上顯示精靈
auto tex = init_texture("tex.png"); auto spr = init_sprite(tex); window.draw(spr);
文字
文字(sf::Text)和精靈相似需要用字體(sf::Font)來初始化:
sf::Text init_text(const std::wstring & s,const sf::Font & font){ sf::Text text; text.setString(s); //設置字符串 text.setFont(font); //設置字體 text.setCharacterSize(36); //文字大小 text.setFillColor(sf::Color::Blue); //顏色 text.setStyle(sf::Text::Bold | sf::Text::Underlined | sf::Text::Italic | sf::Text::StrikeThrough); //屬性 return text; } sf::Font init_font(const std::string & s){ sf::Font font; if (font.loadFromFile(s)) std::cout << "font success\n"; return font; }
如果要顯示中文字符的話要用寬字符串(wstring)
文字的顯示也和精靈相似
auto font = init_font("font.ttf"); auto text = init_text(L"hello world!啦啦啦",font); window.draw(text);
聲音
聲音(sf::Sound)的加載方式也是類似的,要加載(sf::SoundBuffer)
不過Sound是不可復制的
sf::SoundBuffer init_buffer(const std::string & s){ sf::SoundBuffer buf; if (buf.loadFromFile(s)) std::cout << "buffer success\n"; return buf; }
sf::SoundBuffer buf = init_buffer("buf.wav"); sf::Sound sou; sou.setBuffer(buf); sou.play(); // 播放音頻
另外還有一個sf::Music是用來加載比較長的音樂
參考:https://www.sfml-dev.org/tutorials/2.5
by karl07