2014/12/03(水) [n年前の日記]
#1 [dxruby] DXRubyとスプライトエディタ
この記事は
_DXRuby Advent Calendar 2014
の3日目です。
2日目の記事は、しのかろさんの _「デジゲー博2014イベント・リポート インディー・ゲームとDXRuby」 でした。Ruby+DXRubyを用いたADVっぽいゲームエンジンの実装事例、興味深いです。Ruby は Perl同様、テキストファイルに対する処理が書きやすい印象もあるので、各自がシナリオファイルのフォーマットを改変して作業効率改善が期待できるかも、などと夢想してしまったりして。
さて。自分、今年は、「DXRubyとスプライトエディタ」というお題で書いてみました。せっかくだから、試しにスライドを作って SlideShare にアップロードしてみたりして。これで多少は読みやすいはず…?
この日記ページにちゃんと貼り付けられてるか不安なので、一応 _元になったPDF も置いておきます。
もっとも、現状では、アタリ範囲等を指定できないので、そのままではゲーム内で使えないような気もしていますが…。Windows.drawEx() で描画してる部分を、Sprite へ値を設定する処理に書き換えれば、どうにかなってくれないものかしら。
まあ、スプライトエディタで連番画像をエクスポートして、それをDXRubyで表示して使うほうが全然楽ですけど。画像サイズ・容量が問題にならないなら、それが一番いいような気がします。
てなわけで、今回の記事は以上です。
明日の記事は、しのかろさんの _「DXRuby機能リクエスト」 です。
2日目の記事は、しのかろさんの _「デジゲー博2014イベント・リポート インディー・ゲームとDXRuby」 でした。Ruby+DXRubyを用いたADVっぽいゲームエンジンの実装事例、興味深いです。Ruby は Perl同様、テキストファイルに対する処理が書きやすい印象もあるので、各自がシナリオファイルのフォーマットを改変して作業効率改善が期待できるかも、などと夢想してしまったりして。
さて。自分、今年は、「DXRubyとスプライトエディタ」というお題で書いてみました。せっかくだから、試しにスライドを作って SlideShare にアップロードしてみたりして。これで多少は読みやすいはず…?
この日記ページにちゃんと貼り付けられてるか不安なので、一応 _元になったPDF も置いておきます。
◎ DXRubyでSpriterファイルを表示してみる。 :
というわけで、スライドの最後のあたりで書いてましたが、
_スプライトエディタ Spriter
のプロジェクトファイルをDXRubyで表示できましたので、スクリプト一式を置いておきます。下のような表示ができます。
_spritersconparser.rb.txt
_spritersconparser_20141203.zip
_spritersconparser.rb.txt
_spritersconparser_20141203.zip
- Windows7 x64 + Ruby 1.9.3 p545 mingw32 + DXRuby 1.4.1 の環境で動作確認しました。
- スクリプトソースや、サンプル画像、サンプル.scon は、Public Domain ということで。
◎ 使い方。 :
ひとまず動作する様子を見てみるなら、
任意の Spriterファイルを表示したいなら、
他のスクリプトから呼び出して使いたいなら、以下の記述例を参考にしてください。
ruby main.rbを実行してください。順にアニメが表示されるはずです。
任意の Spriterファイルを表示したいなら、
ruby spritersconparser.rb Spriterファイル.sconという形で実行してください。表示テストができます。.scml (.xml)ではなく、.scon (json)を指定することに注意してください。img00/フォルダ以下にサンプルファイルをいくつか入れときましたので、
ruby spritersconparser.rb girl_spriter.scon ruby spritersconparser.rb sample01.scon ruby spritersconparser.rb sample02.scon ruby spritersconparser.rb sample03.scon ruby spritersconparser.rb sample04.scon ruby spritersconparser.rb sample05.sconてな感じで確認できると思います。
他のスクリプトから呼び出して使いたいなら、以下の記述例を参考にしてください。
require 'dxruby' require_relative 'spritersconparser' ani = SpriterSconParser.new("img00/girl_spriter.scon") ani.set_anime("default", "run") Window.loop do ani.draw(320, 240 + 120) ani.update end水平垂直反転表示や、回転表示も対応済みです。詳しくは、doc/index.html を見てください。
◎ 現在分かってる不具合。 :
- Spriter上で全体を管理するボーンを入れようとした場合、0度以外で作ってしまうと、反転表示の向きがおかしくなる。全体を管理するボーンを入れる場合、0度のボーン(右方向に向かって伸びるボーン)にしてください。(※ 反転表示がおかしくなったときだけ気にすればいいと思います。)
- 処理が重い。使うとしたら、大きいボスキャラを一体だけ出す時ぐらいしか使えないかも…。プレイヤーキャラや、わらわら出てくる雑魚敵に使うと、たぶん処理落ちします。
- これは Spriter の問題ですが、時間の値が整数のみなので、60FPS (= 1フレーム16.666...ms) ピッタリのデータを作れません。1フレーム 16ms、62.5FPSで設定して、1秒 = 960ms (16ms x 60フレーム) と思いながらデータを作ればOKかなと。
もっとも、現状では、アタリ範囲等を指定できないので、そのままではゲーム内で使えないような気もしていますが…。Windows.drawEx() で描画してる部分を、Sprite へ値を設定する処理に書き換えれば、どうにかなってくれないものかしら。
まあ、スプライトエディタで連番画像をエクスポートして、それをDXRubyで表示して使うほうが全然楽ですけど。画像サイズ・容量が問題にならないなら、それが一番いいような気がします。
てなわけで、今回の記事は以上です。
明日の記事は、しのかろさんの _「DXRuby機能リクエスト」 です。
[ ツッコむ ]
以上です。