DXRuby64
DXRuby64 は 64ビット版の Ruby 3.1以降用にカスタムビルドされた DXRuby で、Universal C Runtime(UCRT)でビルドできるように本家DXRubyのソースにパッチを当てたものです。DXRuby64により、64ビット版の Rubyでも DirectX9をベースにした 2Dゲームを開発できるようになります。
注意: この gem は個人によって作成された非公式バージョンであり、本家DXRubyのプロジェクトでメンテナンスされているものではありません。
インストール
gem をインストールするには、以下のコマンドを実行してください。
gem install dxruby64
注意: DXRuby64の動作に影響が出る可能性がありますので、本家DXRuby がインストールされていない状態で上記のコマンドを実行してください。 (本家DXRubyは Ruby 3.1以降のバージョンには対応していないため、基本的に gemがインストールされていることはないと思われます)
使用方法
インストール後、従来どおり DXRubyの機能を使うことができます。
require 'dxruby'
# 例:ウィンドウを作成し、単純な図形を表示
Window.width = 640
Window.height = 480
# 四角形を描画
Window.loop do
Window.draw(100, 100, Image.new(50, 50, C_WHITE))
end
【サンプルファイルについて】
この gem には sample/ ディレクトリ内に簡単なサンプルコードが含まれています。 (本家 DXRubyで提供されていたものをそのまま転載)
gem のインストール先は Ruby の環境によって異なりますが、以下のコマンドでその場所を確認することができます。
gem contents dxruby64
必要条件
Ruby 3.1 以降 (64ビット版) が Windowsにインストールされていること。
d3dx9_40.dll
が配置されていること。これは DirectX 9 ランタイムの一部で、Microsoft の公式サイトからダウンロードすることができます。
【d3dx9_40.dll
の入手および配置方法】
DirectX End-User Runtimes (June 2010) に掲載されているファイル(
directx_Jun2010_redist.exe
)をダウンロードします。ダウンロードした
directx_Jun2010_redist.exe
をダブルクリックして、任意のディレクトリにファイルを展開します。展開したフォルダの中から
Nov2008_d3dx9_40_x64.cab
を探し、ダブルクリックします。Nov2008_d3dx9_40_x64.cab
の中にあるd3dx9_40.dll
を見つけ、Ruby のインストールフォルダ内のbin
フォルダにコピー(または移動)します。(例:C:\Ruby34-x64\bin)
Soundクラスの改修について
経緯など
本家DXRuby の Soundクラスは DirectMusic
というライブラリを使用していましたが、
Windows 10/11 の 64bit 環境ではこの DirectMusic
は正しく動作せず、以下のようなエラーが発生することが確認されています。
`DXRuby::Sound#initialize': DirectMusic initialize error - CoCreateInstance (DXRuby::DXRubyError)
このため、DXRuby64では DirectMusic
の代替として DirectSound
というライブラリを使用するように改修をおこないました。
(DirectSound
は SoundEffectクラスでもすでに使用されており、実績のあるライブラリです)
改修版 Soundクラスのサンプル
前述のサンプルファイルの中に wav_sample/
ディレクトリに改修版の Soundクラスを用いたサンプルを追加しましたのでお試しください。
なお、下記の制限事項などについてもあわせてご確認ください。
制限事項など
DirectSound
の機能上の制約などから、改修に伴って以下のような仕様変更をおこないました。
Soundクラスで扱うことができるファイル形式は
.wav
,.mp3
および.ogg
(Vorbisコーデックのみ) (本家DXRuby では.wav
および.mid
)再生時のループ回数の指定はできず、「1回のみ再生」または「無限ループ」のいずれか
ゲームなどで利用される効果音や BGMなどの再生を念頭に、以下に記載の最小限のメソッドのみを実装
■使用できるメソッド(新規にアレンジしたものも含む)
.new オブジェクトの生成
#play 再生
#stop 停止
#volume= 音量設定(0~255)
#set_volume 音量設定(上記 #volume= のエイリアス) ※ただし従来の第2引数による音量フェード機能はなし
#loop= ループ再生の採否設定(下記 #loop_count と同じ機能で、trueまたは falseで設定するもの)
#loop_count= ループ回数設定(ただし、前述のように「1回のみ再生(0)」または「無限ループ(-1)」のみ可)
#dispose オブジェクトの破棄
#disposed? オブジェクト破棄状況のチェック
■使用できないメソッド(本家DXRubyでは実装されていたもの)
.load_from_memory
#start=
#loop_start=
#loop_end=
#pan
#pan=
#frequency
#frequency=
ライセンス
この gem は zlib/libpngライセンスの下で提供されています。
免責事項
この gem は DXRubyの公式な後継ではなく、新しいバージョンの Ruby用に UCRT環境で動作することを目的としたカスタムビルドです。
リポジトリ
ソースコードや詳細情報は、以下のリポジトリで確認できます。 https://github.com/spoolkitamura/dxruby64
クレジット
このソフトウェアは Sean T. Barrett 氏による stb_vorbis を使用しています。
stb_vorbis はパブリックドメインおよび MIT ライセンスのデュアルライセンスです。
開発者向けガイド
dxruby.so
のビルド手順
gemではビルド済みの .soファイルが提供されますが、開発者がソースから直接ビルドしたい場合は、以下の手順を参考にしてください。
前提条件
Ruby 3.1 以降 (64ビット版) がインストールされていること。
MSYS2
などの開発環境が用意されていること。 (Devkit付きの RubyInstallerを推奨)
手順
- リポジトリをクローンします。
git clone https://github.com/spoolkitamura/dxruby64.git
cd dxruby64
- ext/dxruby64 フォルダに移動して、以下のコマンドで dxruby.so をビルドします。
cd ext/dxruby64
ridk enable
ruby extconf.rb # Makefileを生成
make clean
make # dxruby.soを生成
ビルドされた dxruby.so ファイルは、make install
を実行することによって Rubyの拡張ライブラリ用ディレクトリ(例: C:/Ruby31-x64/lib/ruby/site_ruby/3.1.0/x64-ucrt/)にインストールされます。
なお、このディレクトリの場所は、RbConfig::CONFIG["sitearchdir"]
で確認することができます。
備考
本家 DXRubyのソースは ext/orgに置かれています。
この gemでは、Rubyの各バージョンごとにビルドした dxruby.soを以下のディレクトリ構成で配置しています。
lib/
dxruby.rb ← バージョン振り分け処理
31/
dxruby.so ← Ruby 3.1用
32/
dxruby.so ← Ruby 3.2用
33/
dxruby.so ← Ruby 3.3用
34/
dxruby.so ← Ruby 3.4用