2017/04/26(水) [n年前の日記]
#3 [prog] ゲーム制作ライブラリがキー入力をイベントで処理させるのってどうなんだろ
ポエムです。
pysdl2 もそうだし、gosu もそうだったと思うけど…。キーが押された瞬間、または離された瞬間にイベントが発生するから、キー入力の処理をしたいならそれらのイベントに対応した処理を書け、てな作りになっていて。
個人的に、そこらへん、なんだかしっくりこないのですよね…。
いやまあ、今のPC or OSが、キーが押された/離された瞬間にイベントが発生する仕組みになってるから、ゲーム制作ライブラリもそのままになってるのかなと想像するのですが。ずっとPC上でゲーム作ってた人達は、「それのどこがいかんの?」「こんなの当たり前でしょ?」って感覚なのでしょうけど。
ただ…。例えば大昔のゲーム機って、そこらへんが逆だったんですよね。ジョイスティック(ゲームパッド/ジョイパッド)の、各ボタンのON/OFF状態のみをビット列で返してくる。押された瞬間や離された瞬間を知るためには、こっちでビット演算を、てな感じで。
つまり、世の中、キーのON/OFF状態しか返さない機器もあれば、変化のみをイベントで返す機器もあるわけで。 *1
だけど、ゲームを作る際には、
仕組みの違う機器がある。そして、最終的に欲しい情報は分かってる。だったら、そこはライブラリが吸収すべきじゃないのかなと思えてきたりもするわけで。
ゲームのルーチンを書く側が欲しいのは、「キーが押された」「キーが離された」「キーがずっと押されてる(or 押されていない)」という情報で。キー入力がイベントで処理されて云々とか、ビット列しか返さないとか、そんな知識が欲しいわけじゃないのですよ。でもまあ、そこを知ってないと本当に欲しい情報が得られないから、仕方なく把握して関連処理を書いてるわけですけど。
ちなみに、DXRuby は、その3つが取得できるので、使ってて便利なのです。キー入力周りを書くたびに、「ホント、気が利いてるよなあ…」と感心していたり。それに比べると、pysdl2 や gosu は、本来包むべき部分を包まないで、ライブラリの利用者側に丸投げしちゃってる印象が。何かこのあたり、「いやいや、そこはあえてそうしているのだよ。何故なら」的な、作者さんの思想でもあるのかしらん。
まあ、個人的に、あのへんなんだかしっくりこないんだよなあ、ってだけの話です。そんだけです。
ポエムでした。
pysdl2 もそうだし、gosu もそうだったと思うけど…。キーが押された瞬間、または離された瞬間にイベントが発生するから、キー入力の処理をしたいならそれらのイベントに対応した処理を書け、てな作りになっていて。
個人的に、そこらへん、なんだかしっくりこないのですよね…。
いやまあ、今のPC or OSが、キーが押された/離された瞬間にイベントが発生する仕組みになってるから、ゲーム制作ライブラリもそのままになってるのかなと想像するのですが。ずっとPC上でゲーム作ってた人達は、「それのどこがいかんの?」「こんなの当たり前でしょ?」って感覚なのでしょうけど。
ただ…。例えば大昔のゲーム機って、そこらへんが逆だったんですよね。ジョイスティック(ゲームパッド/ジョイパッド)の、各ボタンのON/OFF状態のみをビット列で返してくる。押された瞬間や離された瞬間を知るためには、こっちでビット演算を、てな感じで。
つまり、世の中、キーのON/OFF状態しか返さない機器もあれば、変化のみをイベントで返す機器もあるわけで。 *1
だけど、ゲームを作る際には、
- 「○○キーが押された瞬間か?」
- 「○○キーが離された瞬間か?」
- 「今、○○キーが押されてる状態か(押されてない状態か)」
仕組みの違う機器がある。そして、最終的に欲しい情報は分かってる。だったら、そこはライブラリが吸収すべきじゃないのかなと思えてきたりもするわけで。
ゲームのルーチンを書く側が欲しいのは、「キーが押された」「キーが離された」「キーがずっと押されてる(or 押されていない)」という情報で。キー入力がイベントで処理されて云々とか、ビット列しか返さないとか、そんな知識が欲しいわけじゃないのですよ。でもまあ、そこを知ってないと本当に欲しい情報が得られないから、仕方なく把握して関連処理を書いてるわけですけど。
ちなみに、DXRuby は、その3つが取得できるので、使ってて便利なのです。キー入力周りを書くたびに、「ホント、気が利いてるよなあ…」と感心していたり。それに比べると、pysdl2 や gosu は、本来包むべき部分を包まないで、ライブラリの利用者側に丸投げしちゃってる印象が。何かこのあたり、「いやいや、そこはあえてそうしているのだよ。何故なら」的な、作者さんの思想でもあるのかしらん。
まあ、個人的に、あのへんなんだかしっくりこないんだよなあ、ってだけの話です。そんだけです。
ポエムでした。
*1: そういえば、「キーが押された瞬間」しか分からない、富士通 FM-8/7 なんてPCもあったっけ…。プレイヤーキャラを動かしたら、移動を止めるためにテンキーの5を押さないといけないという…。ググってみたら、
_開発者は「このPCでゲーム作るヤツなんてまさか出てくるはずがない」と思ってた
らしいですな…。
[ ツッコむ ]
以上です。