如何解决SDL2的这种生锈寿命限制问题?

时间:2018-04-10 06:43:33

标签: rust sdl-2

我正在尝试使用sdl2 ttf渲染一些字体。 sdl2中Font类型的类型使用PhantomData对上下文具有生命周期依赖性。我发现它很难使用。这是我试图使用的最小代码。

main.rs

extern crate sdl2;

use sdl2::ttf::{self, Font};
use sdl2::ttf::Sdl2TtfContext;

struct App<'ttf> {
    ctx: Sdl2TtfContext,
    glyph_renderer: GlyphRenderer<'ttf>,
}

impl<'ttf> App<'ttf> {
    fn render(&self) {}
}

struct GlyphRenderer<'ttf> {
    font: Font<'ttf, 'static>,
}

fn main() {
    let ttf_context = ttf::init().unwrap();

    let font = ttf_context.load_font("./assets/Supermercado-Regular.ttf", 50).unwrap();
    let glyph_renderer = GlyphRenderer { font };

    let app = App {
        ctx: ttf_context,
        glyph_renderer,
    };

    app.render();
}

Cargo.toml

[package]
name = "demo-rust"
version = "0.1.0"
authors = ["clojure"]

[dependencies.sdl2]
version = "0.31.0"
default-features = false
features = ["ttf"]
    移动
  1. ttf_context。我可以解决这个问题,但是以丑陋的方式改变代码。
  2. Font在上下文中具有生命周期限制。无法解决这个问题。
  3. 如果您发现Sdl2TtfContextFont有用,则此文档包含$count=count($json); if($count > 10){ $count = 10; } for ($x = 0; $x < $count; $x++) { } if($request->hasFile('ex_file')){ return "yes i have a file"; } 的声明。 DOC

1 个答案:

答案 0 :(得分:0)

好吧,我可以通过将上下文创建移动到外部作用域来解决此问题。它不能放在结构上。

fn start(ttf_context: &Sdl2TtfContext) {
    let font = ttf_context.load_font("./assets/Supermercado-Regular.ttf", 50).unwrap();
    let glyph_renderer = GlyphRenderer { font };

    let app = App {
        glyph_renderer,
    };

    app.render();
}

fn main() {
    let ttf_context = ttf::init().unwrap();
    start(&ttf_context);
}