Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
rustraight
DXLib にインスパイアされた、Rust 向けシンプル 2D ゲームライブラリです。
wgpu と Win32 API を基盤とし、GPU の低レイヤな知識なしに 2D ゲームを作れる入門者向け API を提供します。
Windows 専用ライブラリです。 グラフィックス・入力・サウンドにそれぞれ DX12 / Win32 / XAudio2 を直接使用しているため、Windows 10 以降が動作要件となります。
特徴
- ウィンドウ & 仮想スクリーン — ウィンドウサイズに依存しない独立した仮想解像度でゲームロジックを記述
- 背景透過ウィンドウ — DX12 DirectComposition + DWM による per-pixel alpha 透過
- スプライト描画 — PNG / JPEG / BMP など WIC 対応フォーマットの読み込みとスケール / 回転 / アルファ / 反転付き描画
- スプライトシート —
load_div_screenでスプライトシートを個別スプライトに分割 - 図形描画 — ピクセル・線・矩形・円・三角形(塗りつぶし・アウトライン)
- ブレンドモード — 通常 / 加算 / 乗算
- サブスクリーン — オフスクリーンレンダーターゲットをスプライトハンドルとして利用
- キーボード & マウス入力 — 押している / 押した瞬間 / 離した瞬間を全キー・ボタンで判定
- ゲームパッド入力 — ボタンとアナログスティック (DirectInput / XInput)
- サウンド — WAV(PCM 8/16-bit)・OGG Vorbis の読み込み・再生(XAudio2)
- テキスト描画 — システムフォントまたはカスタム TTF/OTF ファイルによる文字描画(テクスチャキャッシュ済み)
- デルタタイム & 経過時間 — フレームレート非依存の移動処理を標準サポート
- オーバーレイウィンドウ — メインウィンドウの外側(全画面)に描画できる透過オーバーレイ
- デバッグログ — デバッグビルド時のみコンソールに出力されるログマクロ
インストール
Cargo.toml に以下を追加してください:
[]
= "0.5"
クイックスタート
use *;
API リファレンス
初期化
init;
advance_frame // ウィンドウが閉じられると false を返す
delta_time // 前フレームからの秒数
elapsed_time // アプリ起動からの経過秒数
set_window_position
window_position // ウィンドウのクライアント領域サイズを変更
resize_screen // 指定スクリーン(MAIN_SCREEN 含む)のサイズを変更
window_size // ウィンドウのクライアント領域サイズを取得
screen_size // 指定スクリーン(MAIN_SCREEN 含む)のサイズを取得
show_cursor // マウスカーソルの表示 / 非表示
グラフィックス
target には MAIN_SCREEN(メインウィンドウ)またはサブスクリーンのハンドルを渡します。
// メインウィンドウを示す定数(draw_* の target 引数に使う)
MAIN_SCREEN // = 0
// 画像の読み込み (WIC 経由: PNG / JPEG / BMP / TIFF / GIF / WebP 等)
// 読み込んだ画像は内容を焼き込んだスクリーンとして返る(create_screen と同じ種類のハンドル)
let spr: u32 = load_screen;
let sheet: = load_div_screen; // tile_w / tile_h は i32
free_screen; // 指定ハンドルのスクリーンを解放(MAIN_SCREEN は不可)
free_all_screens; // MAIN_SCREEN を除く全スクリーンを解放
resize_screen // スクリーンのサイズを変更(内容は破棄)
screen_size // スプライト / サブスクリーンのサイズを取得
// スプライト描画(target には MAIN_SCREEN またはサブスクリーンのハンドルを渡す)
draw_screen;
draw_screen_ex;
// 図形描画
draw_fill; // 全塗りつぶし
draw_pixel; // ピクセル
draw_line; // 線
draw_rectangle; // 矩形 (true=塗りつぶし)
draw_circle; // 円 (false=アウトライン)
draw_triangle;
// 描画キューのクリア (画面をリセット)
clear;
// ブレンドモード(次の draw_* コマンドに適用)
set_blend; // 加算
set_blend; // 乗算
set_blend; // 通常に戻す
// マスク(次の draw_screen / draw_screen_ex に適用)
set_mask; // mask_handle のアルファ値を形状マスクとして使用
reset_mask;
サブスクリーン
オフスクリーンのレンダーターゲットをスプライトハンドルとして利用できます。
// サブスクリーンを作成(スプライトハンドルが返る)
let screen = create_screen;
// サブスクリーンに描画
clear;
draw_rectangle;
draw_screen;
// メインウィンドウにサブスクリーンを貼る
draw_screen;
入力
// キーボード
is_pressed // 押している間 true
is_just_pressed // 押した瞬間だけ true
is_released // 離した瞬間だけ true
// マウス
mouse_position // (x, y) 仮想スクリーン座標
mouse_delta // 前フレームからの移動量(ピクセル)
is_mouse_pressed // 押している間
is_mouse_just_pressed // 押した瞬間
is_mouse_released // 離した瞬間
mouse_wheel // ホイール回転量(上=正、1ノッチ=120)
// ゲームパッド
is_pad_pressed // pad_id=0
is_pad_just_pressed
is_pad_released
pad_axis // -1.0 〜 1.0
is_pad_connected
pad_count
乱数
外部クレートに依存しない軽量な擬似乱数生成器です。
rand_range // min..=max の一様乱数
rand_f32 // 0.0..1.0 の一様乱数
seed_rng // 乱数生成器のシードを明示的に設定(テスト・リプレイの再現用)
3D数学ユーティリティ
3Dレンダリングパイプライン(カメラ・深度バッファ・射影行列)は持ちません。Vec3演算と icosphere(測地線球)メッシュ生成のみを提供する軽量ユーティリティです。3D→2Dの投影・ 回転・描画は引き続きゲーム側で行い、既存の2D API(draw_circle 等)で描画してください。
let a = new;
let b = new;
a.dot // 0.0
a.cross // Vec3::new(0.0, 0.0, 1.0)
a.normalize
let mesh = icosphere; // 分割レベル2の単位球メッシュ(頂点162・面320)
mesh.vertices // Vec<Vec3>
mesh.faces // Vec<[u32; 3]>
サウンド
let se = load_sound;
let bgm = load_sound;
play_sound; // 1 回再生
play_sound; // ループ再生
stop_sound;
set_volume; // 音量 0.0 〜 1.0
free_sound; // 指定ハンドルの音声を解放(再生中なら停止してから)
free_all_sounds;
対応フォーマット: WAV(PCM 8-bit / 16-bit)、OGG Vorbis
テキスト
set_font_size; // デフォルトフォントサイズを変更
set_font_file; // カスタムフォントファイルを指定
draw_text;
// フォントハンドルを直接指定
let font = load_font;
draw_text_ex;
let w = get_text_width;
同一(文字列 + フォント + 色)の組み合わせは GPU テクスチャがキャッシュされます。240 フレーム未使用のエントリは自動削除されます。
オーバーレイウィンドウ
メインウィンドウの外側を含む全画面に透過描画できるオーバーレイです。
// WindowConfig で有効化する
init;
while advance_frame
draw_* でメインウィンドウ外座標に描画すると自動的にオーバーレイへフォールバックします。
| 関数 | 説明 |
|---|---|
overlay_visible(bool) |
オーバーレイウィンドウの表示/非表示 |
overlay_draw_screen(x, y, handle) |
スプライトをオーバーレイに描画 |
overlay_draw_screen_ex(x, y, handle, params) |
拡張パラメータ付き描画 |
overlay_draw_text(x, y, text, color) |
テキストをオーバーレイに描画 |
overlay_blend_set(BlendMode) |
オーバーレイのブレンドモードを設定 |
overlay_clear() |
オーバーレイの描画キューをクリア |
デバッグログ
デバッグビルド (cargo run / cargo build) のみ標準エラーに出力されるログマクロです。リリースビルド (cargo build --release) では出力コードが完全に除去されます。
log_info!; // [情報] スプライトをロードしました: 'player.png'
log_warn!; // [警告] フォントが見つかりません: 'font.ttf'
log_error!; // [エラー] 初期化に失敗しました: ...
内部実装
| 機能 | 実装 |
|---|---|
| グラフィックス | wgpu 27 (DX12) + DirectComposition |
| 画像読み込み | WIC (Windows Imaging Component) |
| サウンド | XAudio2 |
| キーボード / マウス | Win32 メッセージ (WM_KEYDOWN 等) |
| ゲームパッド | XInput |
| テキスト描画 | fontdue + テクスチャキャッシュ |
プラットフォーム対応
| OS | 対応状況 |
|---|---|
| Windows 10 / 11 | ✅ |
| macOS / Linux | ❌ (Win32 API を直接使用) |
ライセンス
MIT — LICENSE を参照