
2026/10/16 22:22
Show HN: Parin – raylib と Godot の中間に位置する、D言語で書かれた 2D ゲームエンジン
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Parin は、軽量のフレームワークと Godot のような大規模なシステムの間のギャップを埋めることを目的として作成された D 言語で書かれたコード駆動型の 2D ゲームエンジンです。モジュール化された基礎である Joka を用いて構築され、Box2D を通じてピクセル単位の正確な物理演算、アトラスベースのアニメーション、タイルマップ構造などを含む堅牢なコア機能を提供します。会話システムやアニメーションヘルパーのような必須の追加機能が含まれていますが、UI ライブラリは現在進行形であります。このエンジンは Web、Windows、Linux、macOS におけるクロスプラットフォームデプロイを支持しており、ただし Web ビルドでは特定して LDC と Emscripten 4.0.23 が必要となります。ユーザーは、Parin がネイティブのスクリプト言語を持たず(wren-port や arsd.script のような代替手段を推奨)、また内蔵されたシーンシステムを持たない点に注意すべきであり、代わりに Union タイプを使用してシーンを構築するための例を提供しています。Steamworks 配布や ENet ネットワーキングといった高度な機能については、開発者は特定のコンパイラ依存性を管理し、別途バイナリをビルドまたはダウンロードする必要があることが多いです。インストールは DUB(
dub init -t parin)による迅速な方法か、スクリプト実行付きの手動クローンを行うことで可能です。このエンジンは現代的なワークフローに適した柔軟な抽象化を維持しつつ、技術的な要件に対する制御も可能としています。本文
D言語用 2D ゲームエンジン「Parin」のご紹介
Parin とは
使いやすくてシンプルな 2D ゲームエンジンです。
- 設置が容易:簡単に環境構築が可能です。
- 自由度が高い:ゲームの性質に合わせて自由に設計できます。
- 基本機能内蔵:必要な機能がすべて含まれています。
Parin は、
raylib のような軽量ライブラリと Godot のような大規模なエンジンの中間に位置づけられています。
なぜ Parin か?
主な理念は以下の通りです:
- コード主導の設計:
- エンジン側から強制されるアーキテクチャはありません。
- ゲームの性質に合わせてプレイロジックを自由に構造できます。
- 柔軟な抽象化:
- 利便性の高いガベージコレクション機能を提供します。
- 必要に応じて手動管理へ降級するか、完全に回避することも可能です。
- モジュール的な基盤:
- Parin の大部分は汎用的なユーティリティライブラリ
で構築されています。Joka
は単独でも使用可能です。Joka
- Parin の大部分は汎用的なユーティリティライブラリ
- 機能込み:
- アニメーション補助ツールやタイマーなど、一般的なニーズに対するデフォルト設定が多数用意されています。
基本的なコード例
シンプルなサンプルコードです:
import parin; // ゲーム実行中、フレームごとに呼び出されます。 bool hello(float dt) { lockResolution(320, 180); drawText("Helloo!!!", mouse); return false; } // 指定された関数を呼び出すメイン関数を生成します。 mixin runDemo!hello;
メイン機能
- ピクセル単位の正確な物理演算エンジン
- 柔軟なダイアログシステム
- アトラスベースのアニメーションライブラリ
- 効率の良いタイルマップ構造
- シンプルな UI ライブラリ(開発中)
- Box2D、Steamworks、ENet、microui などの追加機能内蔵
- Web、Windows、Linux、macOS の対応
インストール方法
クイックスタート (DUB を使用)
新しいフォルダを作成し、以下のコマンドを実行してください。
dub init -t parindub run
正常に設定が整っている場合、シンプルなメッセージが表示されるウィンドウが立ち上がります。
利用可能な初期テンプレート:
dub init -t parin -- basicdub init -t parin -- entity
DUB 以外でのインストール
新しいフォルダを作成し、以下のコマンドを実行してプロジェクトを準備・実行してください。
1. フォルダの準備:
git clone --depth 1 https://github.com/Kapendev/parin parin_package ./parin_package/scripts/prepare
(Windows:
).\parin_package\scripts\prepare.bat
2. プロジェクトの実行:
- Linux:
または./parin_package/scripts/run
,ldc2
,macos
対応のスクリプトを使用。opend - Windows:
.\parin_package\scripts\run.bat
Linux 環境での利用準備
Parin を Linux で使用するには、事前のライブラリインストールが必要です。
- Ubuntu
sudo apt install libasound2-dev libx11-dev libxrandr-dev libxi-dev libgl1-mesa-dev libglu1-mesa-dev libxcursor-dev libxinerama-dev libwayland-dev libxkbcommon-dev - Fedora
sudo dnf install alsa-lib-devel mesa-libGL-devel libX11-devel libXrandr-devel libXi-devel libXcursor-devel libXinerama-devel libatomic - Arch Linux
sudo pacman -S alsa-lib mesa libx11 libxrandr libxi libxcursor libxinerama - Void Linux
sudo xbps-install make alsa-lib-devel libglvnd-devel libX11-devel libXrandr-devel libXi-devel libXcursor-devel libXinerama-devel mesa MesaLib-devel
ドキュメントと情報
概要を素早く知りたい場合は、サンプルコードのフォルダやショートカットシート(チートシート)から始めてください。詳細については「ツアーページ」をご覧ください。
DDOX ドキュメンテーションエンジンを使用してドキュメントを閲覧する方法:
git clone --depth=1 https://github.com/Kapendev/parin parin_package cd parin_package dub run -b ddox
関連リンク (Artikel):
- 最新記事: 「I Stopped Fighting My Tools(私はツールと戦うのをやめた)」
- その他: dev.to/kapendev
- アーカイブ:
parin/archive
Web ビルド
Parin のパッケージフォルダには、Web 向けのビルドスクリプトが含まれています。
環境要件:
- LDC
- Emscripten(バージョン 4.0.23 が推奨)
- LDC インストール時:
をダウンロードして展開してください。ldc2-X.Y.Z-addon-emscripten.tar.xz
- LDC インストール時:
実行方法:
- DUB を使用:
dub run parin:web - コマンドライン:
./parin_package/scripts/web # Windows: .\parin_package\scripts\web.bat
API の使用方法:
Usage: dub run parin:web -- [flags] [libs] Flags: -help このヘルプを表示します。 -betterc `-betterC' フラグを使用します。 -release `-release' フラグを使用します。 -build ビルド成功後、emrun を実行しないようにします。 Libs: フラグ以外のすべての引数は、追加のライブラリとしてリンクされます。 例:dub run parin:web -- web/libbox2d.a
itch.io へのアップロード手順:
- Web フォルダを開きます。
ファイルを選択し、ZIP ファイルに追加します。index.*- itch.io にアクセスして新しいプロジェクトを作成します。
- 「プロジェクトの種別」で「HTML」を選択します。
- ZIP ファイルをアップロードし、「このファイルはブラウザで再生されます」というオプションを有効にします。
アイデアとコントリビューション
不足している部分をご察知された場合は、Issue をお作りいただくことを歓迎します。GitHub のディスカッションでも情報共有が可能です。
- ホットリロード以外のアイデア: 基本的に受け付けております。
- 小さな追加機能: コアには属さない単一ファイルの D ライブラリとして
フォルダに置くことも可能です(Pull Request で追加)。addons
よくある質問 (FAQ)
Parin で制作されたゲームの一覧はあるのでしょうか? はい、以下のタイトルが制作されています:
- Twenty Seconds, Twenty Steps
- Worms Within
- Clean & Haunted
- Runani
- A Short Metamorphosis
- K, Merge With Me
Parin にはシーンまたはエンティティシステムはありますか? いいえ、公式にはありません。ただし、
examples フォルダに Union タイプを用いた構築方法のサンプルがあります:
- エンティティシステム
- ステート(シーン)システム
- プロジェクトテンプレート
Parin にはスクリプト言語はありますか? いいえ、ありません。以下のプロジェクトが役立つ可能性があります:
- wren-port: Wren プログラミング言語を D への移植版。
- arsd.script: D と JavaScript のハイブリッドに基づいた言語。
- bindbc-lua: Lua の C API に対する静的・動的な D バインディング。
他の利用可能なライブラリはありますか?
- arsd.ini: INI 設定ファイルサポート
- newsdlang: SDLang/XDL 設定ファイルサポート
- dex-cf: CF(設定ファイル)サポート
- dtiled: Tiled マップファイルを解析する D ライブラリ
- text-mode: 8x8 Unicode フォントとマークアップ言語を備えた仮想テキストモード
- Gamut: イメージの符号化および復号化ライブラリ
- gameserver: オンラインゲーム開発用にシンプルなゲームサーバー
Steam でのリリースやマルチプレイヤーゲームの開発は可能ですか? はい、可能です。
parin.bindings に Steamworks と ENet のバインディングが含まれています。
- 統合用のサンプルがあります。
- バイナリ自体は含まれていないため、別途ダウンロードまたはビルド・リンクする必要があります。
推奨されるツールの組み合わせはどれですか?
- エディタ: Zed(アセットフォルダ内でのパス補完には Path Server 拡張機能推奨)
- レベル設計: Tiled
- アート制作: Pixelorama, GIMP
- 音源/効果音: Bfxr, Jfxr
- 音楽: MilkyTracker
アセットフォルダの外からアセットを読み込むことはできますか?
- デフォルトの動作を無効にする:
を呼び出します。setIsUsingAssetsPath(false) - 実行ファイルのフォルダから読み込ませたい場合:
を使用します。setAssetsPath("assetsPath.pathDirName")
アセットやコードのホットリロードはできますか? 標準ではサポートされていません(重要視していないため)。arsd ライブラリを利用すると実現できる可能性があります。
Parin のアセットは無料で利用できますか? はい、可能です。ただし、関連する README でライセンスに関する注意事項を必ずご確認ください。
Parin は raylib のラッパーですか? いいえ、そうではありません。raylib はそのバックエンドの一つです。独自のカスタムバックエンドの開発が進んでいますが、まだ実験段階です(貢献は歓迎)。
HD 向けのゲーム開発に Parin を利用できますか? はい、可能です。