2018/03/05(月) [n年前の日記]
#1 [dxruby] EDGE2からエクスポートしたアニメデータをDXOpalで描画
EDGE2からエクスポートしたキャプチャフレームアニメデータのxmlを、JSONに変換して DXRuby/DXOpal で読み込んで描画するサンプルを書いてみたり。
_DXOpal animxml2json
カーソルキーの上下でパターン切り替え。左右で水平反転の切り替え。
_DXOpal animxml2json
カーソルキーの上下でパターン切り替え。左右で水平反転の切り替え。
◎ 素材画像について。 :
今回作成したドット絵画像は以下。License : CC0 / Public Domain ってことで。自由に使ってください。1パターン 96x96ドット。10x12個並べてある状態。
各パターンを作成するため使ったパーツ画像は以下。これも 96x96ドット単位で並べてある。何か抜けてるところがありそうだけど…。
EDGE2のキャプチャフレームアニメxmlファイルと、変換後の JSON は以下。
_scifistk01_anime.xml
_animedata.json
各パターンを作成するため使ったパーツ画像は以下。これも 96x96ドット単位で並べてある。何か抜けてるところがありそうだけど…。
EDGE2のキャプチャフレームアニメxmlファイルと、変換後の JSON は以下。
_scifistk01_anime.xml
_animedata.json
◎ 攻撃方向は減らしたほうが良かったかも。 :
画像を作っていて思ったけれど、プレイヤーキャラの攻撃方向は、横のみにしたほうが良かったのかもしれないなと。上下や斜めも攻撃できるようにすると、御覧の通り、膨大なパターン数になってしまう…。
これでもまだ、斜め床には非対応なわけで…。仮に、斜め床も対応させようとすると、上記画像の立ってるパターン数 x 4倍のパターン数を増やさないといけない。 *1 更に、しゃがみ攻撃まで加えた場合は、2倍のパターン数になる。
考えてみたら、例えばストライダー飛竜、悪魔城ドラキュラシリーズ、SHINOBIシリーズなどは、基本的に横方向にしか攻撃できないけれど、それでもプレイしていてちゃんと面白いわけで。攻撃方向に制限があったほうが、攻略方法を工夫することに繋がって、むしろ遊びになる、ような気もしてきた。
とは言え、上下や斜めに攻撃できると、敵が空中で派手に動いても狙い撃てるから、敵の動きの制約が少なくなって、ゲーム画面の見た目を派手にできるところもあるわけで。うーん。
せめて、上半身と下半身を、分けて管理するとか…。それもそれでパズルになりそうだけど。
これでもまだ、斜め床には非対応なわけで…。仮に、斜め床も対応させようとすると、上記画像の立ってるパターン数 x 4倍のパターン数を増やさないといけない。 *1 更に、しゃがみ攻撃まで加えた場合は、2倍のパターン数になる。
考えてみたら、例えばストライダー飛竜、悪魔城ドラキュラシリーズ、SHINOBIシリーズなどは、基本的に横方向にしか攻撃できないけれど、それでもプレイしていてちゃんと面白いわけで。攻撃方向に制限があったほうが、攻略方法を工夫することに繋がって、むしろ遊びになる、ような気もしてきた。
とは言え、上下や斜めに攻撃できると、敵が空中で派手に動いても狙い撃てるから、敵の動きの制約が少なくなって、ゲーム画面の見た目を派手にできるところもあるわけで。うーん。
せめて、上半身と下半身を、分けて管理するとか…。それもそれでパズルになりそうだけど。
*1: x:y = 2:1(22.5度)、1:1(45度)の角度の床に対して、右向きと左向きの足の角度をそれぞれ別途用意しないといけないから、4種類(4倍)を追加することになる。
[ ツッコむ ]
#2 [ruby][dxruby] RubyのOpalで少しハマったかもしれず
DXRuby で動いていたスクリプトを DXOpal で動かしたら謎のエラーが出て悩んでしまった。
どうも、ハッシュのキーを配列で返してくれる、Hash#keys が、Opal では動かない気配がする…。いや、もしかすると、自前で(?)JSON からハッシュに変換した際に妙なことになったのかもしれないけど。
更に加えて、以下の記述もエラーになった。
_Hashのキーを文字列からシンボルに変換する - Qiita
どうも Opal のハッシュ関係は、未実装な部分があるか、あるいは動作が元々の Ruby と何か違っている状態なのかもしれない…。いや、もしかすると、自前で(?)JSON からハッシュに変換した際に妙なことに以下略。ちょっと自信無し。
何にせよ、素直な書き方をしてる分にはOpal上でも動くけど、どこかRubyらしい変態チックな書き方をし始めると、Opal上では動かなくなる可能性があったりするのかもしれないなと思えてきたりもして。
どうも、ハッシュのキーを配列で返してくれる、Hash#keys が、Opal では動かない気配がする…。いや、もしかすると、自前で(?)JSON からハッシュに変換した際に妙なことになったのかもしれないけど。
更に加えて、以下の記述もエラーになった。
_Hashのキーを文字列からシンボルに変換する - Qiita
Hash[ h.map{|k,v| [k.to_sym, v] } ]
どうも Opal のハッシュ関係は、未実装な部分があるか、あるいは動作が元々の Ruby と何か違っている状態なのかもしれない…。いや、もしかすると、自前で(?)JSON からハッシュに変換した際に妙なことに以下略。ちょっと自信無し。
何にせよ、素直な書き方をしてる分にはOpal上でも動くけど、どこかRubyらしい変態チックな書き方をし始めると、Opal上では動かなくなる可能性があったりするのかもしれないなと思えてきたりもして。
◎ 文字列のキーをシンボルのキーに変換したいのだけど。 :
JSON を読み込んでハッシュにすると、キーが全部、文字列になってしまう。シンボルのキーにしたいのだけど…。
Ruby の _JSONライブラリ を使えるなら、オプションの :symbolize_names に true を指定してやれば変換してくれるのだけど。DXOpal の場合、そういうことはできない予感。おそらく JSONライブラリ自体が使えない状態であろう気もする。
となると、自前で変換しないといけないわけだけど。おそらく今後も何度かそういう処理をすることになるだろうから、文字列やシンボル名を決め打ちにして処理せずに、汎用性がある関数にできれば…。
いや、以下の記事によると、あまり気にしなくてもいいのかな。シンボルのほうが速くなるのだろうと思ったけど、昔ならともかく最近はそうでもないようだし。
_HashキーのStringアクセスとSymbolアクセスのパフォーマンス比較 - Hack Your Design!
少し話はずれるけど。Ruby 2.5 は、ハッシュのキーを文字列からシンボルに変換する機能を標準で持っているらしい。
_Ruby の Hash のキーを Symbol に変更する - Secret Garden(Instrumental)
調べているうちに、ふと思った。一般的なプログラミング言語では、ハッシュのキーを文字列にしてあるのが普通で、シンボルにして扱うなんて特殊だよなと。処理速度的に大きなメリットがあるならともかく、たいして変わらないのであれば、キーは文字列のままでいいんじゃないか…。
ということで、一旦はキーをシンボルに変換する処理を書いていたけど、やっぱり文字列のまま扱うことにしてしまったり。
Ruby の _JSONライブラリ を使えるなら、オプションの :symbolize_names に true を指定してやれば変換してくれるのだけど。DXOpal の場合、そういうことはできない予感。おそらく JSONライブラリ自体が使えない状態であろう気もする。
となると、自前で変換しないといけないわけだけど。おそらく今後も何度かそういう処理をすることになるだろうから、文字列やシンボル名を決め打ちにして処理せずに、汎用性がある関数にできれば…。
いや、以下の記事によると、あまり気にしなくてもいいのかな。シンボルのほうが速くなるのだろうと思ったけど、昔ならともかく最近はそうでもないようだし。
_HashキーのStringアクセスとSymbolアクセスのパフォーマンス比較 - Hack Your Design!
少し話はずれるけど。Ruby 2.5 は、ハッシュのキーを文字列からシンボルに変換する機能を標準で持っているらしい。
_Ruby の Hash のキーを Symbol に変更する - Secret Garden(Instrumental)
調べているうちに、ふと思った。一般的なプログラミング言語では、ハッシュのキーを文字列にしてあるのが普通で、シンボルにして扱うなんて特殊だよなと。処理速度的に大きなメリットがあるならともかく、たいして変わらないのであれば、キーは文字列のままでいいんじゃないか…。
ということで、一旦はキーをシンボルに変換する処理を書いていたけど、やっぱり文字列のまま扱うことにしてしまったり。
[ ツッコむ ]
以上、1 日分です。