
📝 Rust Code
use nannou::prelude::*;
use std::fs;
struct Model {
font: text::Font,
start_time: f32,
}
fn main() {
nannou::app(model).update(update).view(view).run();
}
fn model(app: &App) -> Model {
app.new_window().size(1000, 800).title("Text Animation").view(view).build().unwrap();
let assets = app.assets_path().unwrap();
let font_path = assets.join("fonts").join("NotoSans-ExtraBold.ttf");
let font_data = fs::read(font_path).expect("폰트 파일을 읽을 수 없습니다.");
let font = text::Font::from_bytes(font_data).expect("폰트를 불러올 수 없습니다.");
Model {
font,
start_time: app.time as f32,
}
}
fn update(_app: &App, _model: &mut Model, _update: Update) {}
fn view(app: &App, model: &Model, frame: Frame) {
let draw = app.draw();
let frame_no = frame.nth();
if frame_no == 0 {
draw.background().color(hsla(0.0, 0.0, 0.01, 1.0));
} else {
draw.rect().w_h(1000.0, 800.0).color(hsla(0.0, 0.0, 0.01, 0.02));
}
let t = (app.time as f32) - model.start_time;
let x_wave = (t * 0.5).sin();
let y_wave = (t * 1.0).cos();
let text_str = "Bamgasi";
draw.text(text_str)
.font(model.font.clone())
.font_size(200)
.no_line_wrap()
.x(x_wave * 150.0)
.y(y_wave * 50.0)
.color(rgba(0.9, 0.4, 0.6, 0.9));
draw.to_frame(app, &frame).unwrap();
}