zoukankan      html  css  js  c++  java
  • 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
    ";//打开图片作为纹理 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

  • 相关阅读:
    Pthon3各平台的安装
    scrapy爬虫 简单入门
    自动定时打卡7.13
    centos7+python3+selenium+chrome
    在Ubuntu安装kubernetes
    在Ubuntu下安装Jenkins
    在Ubuntu安装Docker
    猫眼100 爬虫
    python 招聘数据分析
    mysql8.0.19忘记密码
  • 原文地址:https://www.cnblogs.com/karl07/p/10290320.html
Copyright © 2011-2022 走看看