Rust nannouのテンプレート作ったからご紹介

Rust nannouで毎回1から色々機能を盛り込んでいくと面倒なので、自分用のテンプレートを作っておきました。

GitHubのnannouのところに行けば、exsampleのなかに、templateってあって、そこに、App版とsketch版のテンプレートは用意されているので、それを使えばいいんだけどね。

色々作ってるうちに、キャプチャ機能とか、マウス機能とか、いろいろ盛り込んでいってるうちに、毎回使うようなのがあってそれをいちいち書くのが面倒だから、自分の欲しい機能を追加したら、自分用のテンプレート作るって感じで、今回作りました。

そのソースコードはこんな感じ

use nannou::prelude::*;
 pub fn main() {
     nannou::app(model).update(update).run();
 }
 struct Model {
     _window: window::Id,
 }
 fn model(app: &App) -> Model {
     let _window = app
         .new_window()
         .view(view)
         .key_pressed(key_pressed)
         .mouse_pressed(mouse_pressed)
         .build()
         .unwrap();
     Model { _window }
 }
fn update(_app: &App, _model: &mut Model, _update: Update) {}
fn view(app: &App, _model: &Model, frame: Frame) {
     let draw = app.draw();
     //todo
     draw.to_frame(app, &frame).unwrap();
 }
fn key_pressed(app: &App, _model: &mut Model, key: Key) {
     match key {
         Key::S => {
             app.main_window()
                 .capture_frame(app.exe_name().unwrap() + &format!("{:03}", app.time) + ".png");
         }
         _other_key => {}
     }
 }
fn mouse_pressed(app: &App, _model: &mut Model, button: MouseButton) {
     match button {
         MouseButton::Middle => {}
         MouseButton::Left => {}
         MouseButton::Right => {}
          => {}
     }
 }

こんな感じね。

最初のmain関数がpubになってるのは、そもそもmain.rsがあって、そっちから呼び出す方法で使ってるから、というだけの話。別にpubにせずこれをmain.rsにして使うのであれば、いらないんだけどね。

mod template;
fn main() {
     template::main();
 }

余談ですが、こうやって、呼び出して使う感じ。

前は、cargoのworkspace機能かな?使って、一個一個フォルダ作って、設定ファイル書いてってやってたんだけど、nannou以外に読み込んで使うならいいけど、そうじゃなければ、こっちのほうが楽じゃないか疑惑で笑

色々試したいときは、この方法をつかって、作品作り込むぞ!ってときはcargo workspaceって感じかな?

コメント

タイトルとURLをコピーしました