Show HN: Parin – Dlangで書かれた、raylibとGodotの間をいく2Dゲームエンジン
Show HN: Parin – A 2D game engine between raylib and Godot, written in Dlang (github.com)
要約
D言語で書かれたシンプルでハック可能な2Dゲームエンジン「Parin」が紹介されている。Parinは、raylibのような軽量ライブラリとGodotのようなフル機能エンジンの中間に位置し、コード駆動設計、柔軟な抽象化、モジュール式基盤、便利なデフォルト機能を提供する。Web、Windows、Linux、macOSをサポートし、DUBまたはソースからのインストールが可能。
全文翻訳
Parin
Dプログラミング言語向けの、非常にシンプルな2Dゲームエンジンです。セットアップが容易で、ハック可能、そして必要不可欠な機能が組み込まれています。
なぜParinなのか
Parinは、raylibのような小さなライブラリとGodotのような大きなエンジンの中間に位置します。小さなライブラリよりも多くの方向性を提供しますが、大きなエンジンよりもはるかにオーバーヘッドが少なくなっています。主なアイデアは以下の通りです。
- コード駆動設計: エンジンによって強制されるアーキテクチャはないため、ゲームプレイコードはゲームに合わせて自由に構造化できます。
- 柔軟な抽象化: 便利のためにガベージコレクションが利用可能ですが、手動管理に切り替えたり、完全に回避したりするオプションもあります。
- モジュール化された基盤: Parinのほとんどは、ポータブルなユーティリティライブラリであるJoka上に構築されており、単独で使用することもできます(このraylibの例を参照してください)。
- 「Batteries included」: 一般的なニーズ(アニメーションヘルパー、パスファインディング、画面シェイクなど)に対して、妥当なデフォルト設定が含まれています。
基本的なコード例:
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を使用してParinをインストールする方法を示します。新しいフォルダを作成し、その中で以下のコマンドを実行します。
dub init -t parin
dub run
すべて正しくセットアップされていれば、簡単なメッセージが表示されるウィンドウが現れます。
利用可能な開始テンプレート:
dub init -t parin -- basic
dub init -t parin -- entity
DUBなしでのインストール
新しいフォルダを作成し、以下のコマンドを実行して...
-
フォルダを準備します:
git clone --depth 1 https://github.com/Kapendev/parin parin_package ./parin_package/scripts/prepare # または: .\parin_package\scripts\prepare.bat -
プロジェクトを実行します:
./parin_package/scripts/run # または: .\parin_package\scripts\run.bat # または: ./parin_package/scripts/run ldc2 macos # または: ./parin_package/scripts/run opend
Linuxでの必須ライブラリ
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:
sudo pacman -S alsa-lib mesa libx11 libxrandr libxi libxcursor libxinerama
Void:
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
記事:
- 最新:I Stopped Fighting My Tools
- その他:dev.to/kapendev
- アーカイブ:parin/archive
Webビルド
Parinには、packagesフォルダにWeb用のビルドスクリプトが含まれています。Web用にビルドするには、LDCとEmscripten(バージョン 4.0.23 が推奨)が必要です。LDCをインストールする際に、同じリリースページからldc2-X.Y.Z-addon-emscripten.tar.xzをLDCのインストールフォルダに展開してください。
DUBでスクリプトを実行する:
dub run parin:web
DUBなしで実行する:
./parin_package/scripts/web
# または: .\parin_package\scripts\web.bat
API:
Usage:
dub run parin:web -- [flags] [libs]
Flags:
-help Show this.
-betterc Use the `-betterC` flag.
-release Use the `-release` flag.
-build Avoid emrun after a successful build.
Libs:
Any non-flag argument is linked as an extra library.
Example: dub run parin:web -- web/libbox2d.a
itch.ioへのアップロード:
- Webフォルダを開きます。
index.*ファイルを選択し、ZIPファイルに追加します。- itch.ioにアクセスし、新しいプロジェクトを作成します。
- 「Kind of project」で「HTML」を選択します。
- ZIPファイルをアップロードし、「This file will be played in the browser.」オプションを有効にします。
アイデア
何か不足している点に気づいたら、お気軽にissueを開いてください!GitHub Discussionsで共有することもできます。ホットリロード以外は、ほとんどのアイデアを歓迎します。
コアに含まれない小さなエキストラは、addonsフォルダに単一ファイルのDライブラリとして配置できます。PRを開いてそこにファイルを追加してください。
よくある質問
Parinで作られたゲームのリストはありますか?
- Twenty Seconds, Twenty Steps
- Worms Within
- Clean & Haunted
- Runani
- A Short Metamorphosis
- K, Merge With Me
Parinにはシーンやエンティティシステムがありますか?
いいえ。ただし、例フォルダのUnion型を使用してそれらを構築する方法の例があります:
Parinにはスクリプト言語がありますか?
いいえ。以下のプロジェクトが役立つかもしれません:
- wren-port: D言語へのWrenプログラミング言語のポート。
- arsd.script: 言語はDとJavascriptのハイブリッドに基づいています。
- bindbc-lua: LuaのC APIへの静的・動的Dバインディング。
使用できる他のライブラリはありますか?
- arsd.ini: INI設定ファイルサポート。
- newsdlang: SDLang/XDL設定ファイルサポート。
- dex-cf: CF(Configuration File)サポート。
- dtiled: TiledマップファイルのD言語パーサー。
- text-mode: 8x8 Unicodeフォントとマークアップ言語を備えた仮想テキストモード。
- Gamut: 画像エンコード・デコードライブラリ。
- gameserver: オンラインゲームを試すためのシンプルなゲームサーバー。
Steamでリリースしたり、マルチプレイヤーゲームを作成したりできますか?
はい。Parinには、parin.bindingsにSteamworksとENetのバインディングが含まれています。integrationの例を参照してください。バイナリ自体は含まれていないため、別途ダウンロードまたはビルドしてリンクする必要があります。
推奨ツール?
- エディタ:Zed
- レベル:Tiled
- アート:Pixelorama, GIMP
- サウンド:Bfxr, Jfxr
- 音楽:MilkyTracker
Zedの場合、アセットフォルダ内のパスのオートコンプリートを取得するには、Path Server拡張機能をインストールしてください。
アセットフォルダ外の資産をロードするにはどうすればよいですか?
デフォルトの動作を無効にするには、setIsUsingAssetsPath(false)を呼び出します。または、実行可能ファイルのフォルダからロードするにはsetAssetsPath(assetsPath.pathDirName)を使用します。
アセットやコードのホットリロードはできますか?
ホットリロードは、私が(Kapendev)その機能に興味がないため、標準ではサポートされていません。arsdライブラリが役立つかもしれません。
ダイアログスクリプトをテストするにはどうすればよいですか?
Rinを使用します。これは、ターミナルでダイアログスクリプトを実行する小さなツールです。packages/rinでその使用方法を確認してください。
Parinのアセットは自由に使用できますか?
はい。ライセンスに関する注意点については、関連するREADMEを確認してください。
Parinはraylibのラッパーですか?
いいえ。raylibはバックエンドの1つです。カスタムバックエンドも開発中ですが、まだ実験的です。貢献を歓迎します。
ParinをHDゲームに使用できますか?
はい。スムーズなテクスチャにはFilter.linearを使用し、テクスチャが実際のサイズよりもはるかに小さく描画されることが多い場合はFilter.trilinearを使用します。mipmapsの例を参照してください。