rustraight
DXLib にインスパイアされた、Rust 向けシンプル 2D ゲームライブラリです。
wgpu と winit を基盤とし、GPU の低レイヤな知識なしに 2D ゲームを作れる入門者向け API を提供します。
特徴
- ウィンドウ & 仮想スクリーン — ウィンドウサイズに依存しない独立した仮想解像度でゲームロジックを記述
- スプライト描画 — PNG 画像の読み込みとスケール / 回転 / アルファ / 反転付き描画
- スプライトシート —
load_div_graphでスプライトシートを個別スプライトに分割 - 図形描画 — ピクセル・線・矩形・円・三角形(塗りつぶし・アウトライン)
- ブレンドモード — 通常 / 加算 / 乗算
- サブスクリーン — オフスクリーンレンダーターゲットをスプライトとして利用
- キーボード & マウス入力 — 押している / 押した瞬間 / 離した瞬間を全キー・ボタンで判定
- ゲームパッド入力 — ボタンとアナログスティック (gilrs 経由)
- サウンド — WAV / OGG / MP3 / FLAC の読み込み・再生 (rodio 経由)
- テキスト描画 — システムフォントまたはカスタム TTF/OTF ファイルによる文字描画 (fontdue 経由)
- デルタタイム & 経過時間 — フレームレート非依存の移動処理を標準サポート
- オーバーレイウィンドウ (Windows 限定) — メインウィンドウの外側(全画面)に描画できる透過オーバーレイ
インストール
Cargo.toml に以下を追加してください:
[]
= "0.2"
クイックスタート
use *;
API リファレンス
ウィンドウ
let mut window = default;
window.title;
window.size; // ウィンドウサイズ (ピクセル)
window.screen_size; // 仮想スクリーン解像度
window.resizable;
window.vsync;
window.decorations; // タイトルバー等の装飾
window.transparent; // ウィンドウ背景の透過
window.init; // ウィンドウを開く
window.advance_frame // ウィンドウが閉じられると false を返す
window.delta_time // 前フレームからの秒数
window.elapsed_time // ウィンドウ作成からの秒数
window.set_position // ウィンドウ位置を設定
window.position
グラフィックス
// 画像の読み込み
let spr: u32 = load_graph;
let sheet: = load_div_graph;
free_all_graphs;
// スプライト描画
window.screen_draw_sprite;
window.screen_draw_sprite_ex;
// 図形描画
window.screen_draw_fill; // 全塗りつぶし
window.screen_draw_pixel; // ピクセル
window.screen_draw_line; // 線
window.screen_draw_rectangle; // 矩形 (true=塗りつぶし)
window.screen_draw_circle; // 円 (false=アウトライン)
window.screen_draw_triangle;
// ブレンドモード
window.screen_blend_set; // 加算
window.screen_blend_set; // 乗算
window.screen_blend_set; // 通常に戻す
// マスク
window.screen_mask_set; // スプライトをマスクとして設定
window.screen_mask_reset;
サブスクリーン
オフスクリーンのレンダーターゲットをスプライトとして利用できます。
let mut screen = window.create_screen;
screen.clear;
screen.draw_sprite;
screen.draw_rectangle;
window.screen_draw_sprite;
入力
// キーボード
window.is_pressed // 押している間 true
window.is_just_pressed // 押した瞬間だけ true
window.is_released // 離した瞬間だけ true
// マウス
window.mouse_position // (x, y) 仮想スクリーン座標
window.is_mouse_pressed // 押している間
window.is_mouse_just_pressed // 押した瞬間
window.is_mouse_released // 離した瞬間
// ゲームパッド
window.is_pad_pressed // pad_id=0
window.is_pad_just_pressed
window.is_pad_released
window.pad_axis // -1.0 〜 1.0
window.is_pad_connected
window.pad_count
サウンド
let se = load_sound;
let bgm = load_sound;
play_sound; // 1 回再生
play_sound; // ループ再生
stop_sound;
set_volume; // 音量 0.0 〜 1.0
free_all_sounds;
対応フォーマット: WAV / OGG Vorbis / MP3 / FLAC
テキスト
window.font_size; // サイズ 16 でシステムフォントを使用
window.font_file; // カスタムフォントファイルを指定
window.screen_draw_text;
// フォントハンドルを直接指定
let font = load_font;
window.screen_draw_text_ex;
let w = get_text_width;
オーバーレイウィンドウ (Windows 限定)
メインウィンドウの外側を含む全画面に透過描画できるオーバーレイです。OBS 等のウィンドウキャプチャと組み合わせて、ゲーム画面とデスクトップ上の演出を同時に実現できます。
// init() の前に有効化する
window.overlay_enable;
window.init;
// メインループ内
while window.advance_frame
screen_draw_* でメインウィンドウ外座標に描画すると自動的にオーバーレイへフォールバックします。
| メソッド | 説明 |
|---|---|
overlay_enable(bool) |
オーバーレイを有効化 (init() 前に呼ぶ) |
overlay_visible(bool) |
オーバーレイウィンドウの表示/非表示 |
overlay_clear() |
オーバーレイの描画キューをクリア(フレーム途中でキャンセルしたい場合に使用。毎フレーム末尾に自動クリアされるため通常は不要) |
overlay_draw_sprite(x, y, handle) |
スプライトをオーバーレイに描画 |
overlay_draw_sprite_ex(x, y, handle, params) |
拡張パラメータ付き描画 |
overlay_draw_text(x, y, text, color) |
テキストをオーバーレイに描画 |
overlay_blend_set(BlendMode) |
オーバーレイのブレンドモードを設定 |
プラットフォーム対応
| OS | メインウィンドウ | オーバーレイ |
|---|---|---|
| Windows | ✅ | ✅ |
| macOS | ✅ (未検証) | ❌ |
| Linux | ✅ (未検証) | ❌ |
ライセンス
MIT — LICENSE を参照