标签:方式 字体 ttext blank tps span origin vector 显示
精灵(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
标签:方式 字体 ttext blank tps span origin vector 显示
原文地址:https://www.cnblogs.com/karl07/p/10290320.html