SFML从入门到放弃 图像和音频

Posted karl07

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SFML从入门到放弃 图像和音频相关的知识,希望对你有一定的参考价值。

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
";//打开图片作为纹理 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
";
    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
";
    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

 

以上是关于SFML从入门到放弃 图像和音频的主要内容,如果未能解决你的问题,请参考以下文章

python从入门到放弃之图像处理

obs-studio开源项目从入门到放弃obs-studio项目简介和架构

深度学习:从入门到放弃

深度学习---从入门到放弃优化器

爬虫从入门到放弃——爬虫的基本原理

python全栈开发从入门到放弃之模块和包