SFML從入門到放棄(2) 圖像和音頻


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM