RGSS2を知る(18)
今回はInputモジュール。
Input.dir4とかdir8とか、なんとなくわかりやすいようなメソッドが用意されているが、たとえばdir8を使って8方向に動く処理を書こうと思うとこれが大変面倒くさい。
実は俺もDXRubyのSourceForgeに公開する前のバージョンではそのようなメソッドも作っていたのだが、わかりやすいだけで使い勝手が悪いから削除したのだ。
かわりに作ったのがInput.xとInput.yで、簡単といえば簡単だがこれも名前が悪かった。
さて、RGSSのInputモジュールでは定数が定義されている。
ABCXYZLR、UP/DOWN/LEFT/RIGHT、F5/F6/F7/F8/F9、SHIFT/CTRL/ALTだ。
とりあえずこれら定数の定義値を調べてみた。
open("c:\\test.txt","w") do |fh| h = [] Input.constants.each do |a| temp = eval("Input::#{a}") h[temp] = a.to_s end h.each_with_index do |d,i| fh.write(d + "->" + i.to_s + "\n") if d end end
結果は、
DOWN->2 LEFT->4 RIGHT->6 UP->8 A->11 B->12 C->13 X->14 Y->15 Z->16 L->17 R->18 SHIFT->21 CTRL->22 ALT->23 F5->25 F6->26 F7->27 F8->28 F9->29
となっており、なんとなくそれっぽい値が入ってはいるが、DirectXのパッド配列ともキー定数とも違い、オリジナルで振った番号っぽい。
どのみちキーボードもパッドもこの番号に再定義して使う仕様だからぶっちゃけなんでもいいのだが、配列の要素番号にしては間が空いているのが気持ち悪い。
実装を想像するヒントにでもなるかと思ったが逆に謎が深まってしまった。
RGSSのInputモジュールではパッドが1つしか使えない。
このあたりはRPGで遊んだりするにはかまわないが、別の用途を考え始めると作るものによっては致命的だ。
キーとパッドの再定義はF1を押したらでるダイアログで行う。これはちょっと実装が難しいから、別の方法を考えたほうがよい。
あとはtrigger?、press?があり、それとは別にrepeat?があって、このメソッド構成は良いと思った。
キーとパッドの区別が無いのもよい。それぞれ仮想ボタンに割り当ててしまう方式だからできるやり方だ。
ちなみにこの割り当ての仕組みをDXRubyで使えるようにしたものがDXRConfigというツール&ライブラリで、前にもこのブログで紹介したWindMesserさまで公開されている。
http://windmesser.tm.land.to/