跳转到内容

Graphics 模块

继承关系(概念):

  • Drawable ← Sprite / Text / Shape / VertexArray / VertexBuffer …
  • Transformable ← Sprite / Text / Shape …
  • RenderTarget ← RenderWindow、RenderTexture
  • RenderWindow : Window + RenderTarget
  • Drawable:实现 draw(RenderTarget&, RenderStates) const
  • Transformable:set/getPosition(Vector2f)、set/getRotation(Angle)、set/getScale(Vector2f)、set/getOrigin(Vector2f)、move、rotate(Angle)、scale、getTransform / getInverseTransform

RenderTarget / RenderWindow / RenderTexture

Section titled “RenderTarget / RenderWindow / RenderTexture”
window.clear(sf::Color::Black); // 或带 stencil 的 clear 重载
window.setView(view);
window.draw(drawable); // 可选 RenderStates
window.draw(vertices, count, type, states);
window.display();
  • RenderTexture:尺寸构造 / resize;display() 后 getTexture() 只读引用
  • 截屏替代已删的 RenderWindow::capture:用 Texture::update(window) 再 copyToImage()
const sf::Texture texture("image.png"); // 失败抛 sf::Exception
// 或 texture.loadFromFile(...); resize(Vector2u); update(...);
sf::Sprite sprite(texture); // 必须带 Texture;无默认构造
sprite.setTextureRect(sf::IntRect({10,10},{32,32}));
sprite.setColor(sf::Color::White);
sprite.setPosition({100.f, 50.f});
sprite.setRotation(sf::degrees(45.f));
  • Texture:loadFromFile/Memory/Stream/Image,setSmooth / setRepeated / generateMipmap,getMaximumSize()
  • Image:CPU 像素;loadFromFile / saveToFile / saveToMemory;3.1 支持 QOI(.qoi)
  • create → resize(Texture / Image / RenderTexture)
  • Sprite:getTexture() 返回 引用(非指针);禁止绑定临时 Texture(=delete)
const sf::Font font("arial.ttf"); // openFromFile;非 loadFromFile
sf::Text text(font, "Hello", 50); // Font 必须第一参数
text.setFillColor(sf::Color::Red); // 非 setColor
text.setStyle(sf::Text::Bold | sf::Text::Underlined);

3.1 Text 新能力:

  • HarfBuzz / SheenBidi 塑形:getShapedGlyphs() → ShapedGlyph{glyph, position, cluster, textDirection, baseline, vertexOffset, vertexCount}
  • setLineAlignment(LineAlignment::{Default,Left,Center,Right})
  • setTextOrientation(TextOrientation::{Default,TopToBottom,BottomToTop})
  • setClusterGrouping(ClusterGrouping::{Grapheme,Character,None})
  • setGlyphPreProcessor(...) 逐字形改 style / fill / outline
  • 弃用: findCharacterPos → getShapedGlyphs()(注意:局部坐标 vs 旧 API 全局坐标)
  • 弃用: Font::getKerning(uint32_t,...) → char32_t 重载

基类 Shape;CircleShape、RectangleShape、ConvexShape。
填充 / 描边:setFillColor、setOutlineColor、setOutlineThickness、setTexture / setTextureRect。

  • Vertex:聚合初始化(无构造函数):position、color、texCoords
  • PrimitiveType scoped:Points、Lines、LineStrip、Triangles、TriangleStrip、TriangleFan
    • 已删:Quads、旧名 LinesStrip / TrianglesStrip / TrianglesFan
  • VertexBuffer::Usage scoped enum
  • 加载:文件 / 内存 / 流 + 类型;失败可抛异常的构造
  • setUniform / setUniformArray(已无 setParameter)
  • Shader::Type scoped;sf::Glsl 命名空间辅助类型
  • setCenter、setSize、setRotation(Angle)、setViewport、setScissor、move、rotate、zoom
  • 无 reset:直接赋新 View
// 预置混合模式是命名空间级常量:sf::BlendAlpha / BlendAdd / BlendMultiply / BlendMin / BlendMax / BlendNone
sf::RenderStates states(sf::BlendAlpha, sf::StencilMode{}, sf::Transform{},
sf::CoordinateType::Pixels, /*texture*/ nullptr, /*shader*/ nullptr);
// 或默认:sf::RenderStates::Default
// 成员:blendMode, stencilMode, transform, coordinateType, texture, shader

BlendMode::Factor / Equation 为 scoped enums。
CoordinateType 独立 enum class(不再挂在 Texture 下)。

常用静态色;RGBA 分量。

相关教程:Drawing、Sprite / Text 等。