| hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。 |
ゲームに欠かせないゲームパッド(ジョイスティック)入力を手軽に便利に使用するモジュールを作ってみます。
HSP3にはヘルプブラウザには載っていないモジュールいくつかパッケージに含まれており、非常に便利そうな命令が豊富に隠れているようです。(プログラミング・マニュアル1のプログラミングガイド、HSP3支援モジュールの項目を参照。)
さて、この中にmod_joystick.as(MIAさん作成)というゲームパッドを使用可能にするモジュールが含まれているのですが
そのままではちょこっとだけ使いにくいので、今回はこれを拡張したものを作成してみました。
このモジュールでは次の特徴があります。
そのまま実行すれば実行サンプルを見ることが出来ます。ゲームパッドを接続して実行してみてください(実行中に接続してもOKです)。
| + | ジョイスティック情報取得モジュール |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 | - | - | | | ! | |
モジュールの使い方はスクリプト内のコメントを参照してください。
改訂版モジュール
このモジュールから、バグを取り除き、機能の追加とヘルプを追加したパッケージを作成しました。
モジュールの中のことはともかく、ジョイスティックに対応したい方。
サンプルを参考に作ってみたけど、バグに悩ませられている方。
は、こちらをご利用ください。
PAD設定さん:http://homepage3.nifty.com/ghpk/dl/dl11.htm
同じような形、同じようなボタン配置のゲームパッドでもメーカーによってはボタン1〜の配置順番が異なっていることがあるようです。
また、PS/PS2コントローラをパソコンに接続するコンバータもメーカーによってボタン配置がことなってしまうようです。
またさらに、ゲームパッドによってはボタン配置場所そのものがことなるものが多数出回っています。(PSやサターンなどのようなタイプ)
このような理由からPCでのゲーム開発の場合、デフォルトのキー配置以外にユーザーがキー配置を変更する余地を残しておくことが必要でしょう。
もちろんゲームパッドを持っていないキーボードユーザーへの配慮も必要です。
ジョイスティックIDとは…
と、このようなものです。
しかし、このジョイスティックIDという呼び名は一般的ではないらしく検索しても出てきません。どなたか一般的な呼び名をご存知でしたら教えてください。
さてジョイスティックIDは普段ユーザーは気にしないでいい値です。そのため、今自分が使っているジョイスティックのIDが何番か?ということも知らなくて当然です。
またジョイスティックを1つしか使っていなくてもIDが0とは限りません。そのためプログラミングする際には何らかの配慮が必要になってきます。
例えば、使えるジョイスティックIDを自動検出して指定するか、使えるジョイスティックIDからユーザーに選択させる方法が考えられます。
蛇足ですが…
joyGetPosEx?、joyGetPos?関数のマニュアルではJOYSTICKID1, JOYSTICKID2としか書かれていません。が、実際には上記のような整数値なので0以上の値を指定して使います。
ちなみに変数の中身はJOYSTICKID1=0, JOYSTICKID2=1となっている。マニュアルを鵜呑みにするとID=1まで、ジョイスティック2個しか使えないことに…なんでこんな書き方なんでしょうね。
ジョイスティックIDはドライバをインストールされた(認識された)ジョイスティックごとに割り振られ、USBを抜き差ししてもそのジョイスティックのジョイスティックIDは変更されません。
コントロール パネルからIDの確認と変更が可能です。
ジョイスティックを1つしか持たないユーザは通常ID=0がそのジョイスティックのIDになります。
しかし、ゲームパッドを買い換えた(買い足した)ユーザーは、新規に接続したジョイスティックにID=1が割り振られることになります。さらに新規ジョイスティックを接続するとID番号は増えていきます。
このためジョイスティックIDを0で固定してゲームを作ると、ジョイスティックが使えないユーザーが出てくることになります。
このようにせっかくゲームパッドに対応したゲームを作成しても、ゲームパッドを使えないユーザーが出てきてしまうことがあります。(設定変更すればいいということに気付かないユーザーは少なくないでしょう。)
詳細未確認のためこの解説は推測です。XPでのジョイスティックIDの挙動の詳細はこれを書いている私にはよくわかりません。(XPユーザではないため)
ジョイスティックが接続されると自動的に小さい番号のIDが割り振られるようです。
接続したジョイスティックに対するジョイスティックIDは固定ではなく、変動するようです。(IDが飛び飛びになることもなく、番号はつめて配布されるらしいです。)
優先デバイスの設定がされていなければ、接続されたジョイスティックが1個だけなら、ジョイスティックIDは常に0となるようです。
XPより古いOSではジョイスティックIDは固定(USBを抜き差ししてもジョイスティックID番号が変わらない)となっています。
各ジョイスティックに割り振られたジョイスティックIDは、コントローラID(=ジョイスティックID+1)として確認・変更が可能です。
確認・変更するには、ゲームパッドを接続した状態で、[スタート] ボタンから、「設定」→「コントロール パネル」→「ゲーム オプション」→「詳細」タブまたは「コントローラ ID」タブとすることで確認できます。
またこのダイアログでIDの割り振りを変更できます。ただし
コントローラID = ジョイスティックID + 1 ジョイスティックID = コントローラID - 1
コントローラIDは1〜
ジョイスティックIDは0〜
であることに注意してください。
XP以降のOSでは「ゲームコントローラ」でのコントローラIDの確認はできません。
その代わり、ジョイスティックが接続されると使っていない一番小さいID番号を割り振るようになっているようです。
優先デバイスの設定がされていなければ接続されたジョイスティックが1個だけなら、ジョイスティックIDは常に0(コントローラIDは常に1)ということになります。
ゲーム機用のジョイスティックをパソコンへ接続するUSB変換コネクタというものがあります。使い慣れたゲーム機用ジョイスティックをパソコンで使えるという便利なものです。しかし、使用には多少の注意が必要になります。
APIのjoyGetDevCaps?関数を使用するとジョイスティックの性能情報を取得できます。
構造体からの情報取得方法を間違っていたことが判明したので修正しました。
しかし…szRegKey?とszOEMVxDの意味がさっぱりわかりません。orz
| + | ジョイスティック性能取得テスト |
![]()
|
XPってジョイパッドIDがどんなふうに割り当てられているのか分からなくて困りますね。これを使えば少しは解決するでしょうか?
ジョイスティックの接続状態を取得するサンプルです。接続されている全てのジョイパッドのIDと名前を取得して表示します。
PCにジョイスティックを接続した状態で実行してみてください。実行中に接続してもダメです。
| + | ジョイスティックの接続状態を取得するサンプル |
![]()
|
ゲームを作っていて、キーの同時押しが認識されない!と気付いたことはありませんか?
キーボードのキーを何個まで同時に押して認識できるかをあらわす言葉をキーロールオーバーといいます。
例えば3キーロールオーバーならキーを3つまで同時押ししても認識してくれます。
また、nキーロールオーバーならどのキーをどれだけ同時押ししても全ての押したキーを認識してくれます。
nキーロールオーバーは一部の高級キーボードだけが対応しており、一般ユーザーは3キー〜擬似nキーロールオーバーのキーボードを使用しています。
このようなキーボードの性能の制約によりほとんどの一般ユーザーのキーボードは同時押しを認識しません。
キーボード操作のゲームを作るときは、複数キーの同時押しが必要なルールにならないよう注意しましょう。
どうしても同時押しが必要なゲームを作りたいときは、キーボードではなく、標準で全キー同時押し可能であるジョイスティックを利用することをお勧めします。
ユーザーにnキーロールオーバー対応キーボードを買わせるよりはずっと安く済みます。
| + | ログ1 |
|
ジョイスティックIDってのは…検索してもほとんど出ませんね。呼び方違うのかな?APIのjoyGetPosEx、joyGetPos関数で指定するパラメータuJoyIDのこと。JOYSTICKID。 0〜(ドライバにサポートされるジョイスティック数-1)の整数値。 PCに接続されているゲームパッドにはそれぞれ重複しない0以上のジョイスティックID(番号)がつけられている。 Win98,ME,2kではコントローラID(=ジョイスティックID+1)として確認、変更が可能である。 WinXP以降のOSでは確認することは出来ないかわりに、優先的にジョイスティックIDを小さい番号にする設定は可能。とまあこんな感じです。この呼び方は検索しても出てこないので独自といえば独自なのかも…、でも概念はjoyGetPos?関数のそれなので独自ではないです。 -- GENKI? 2007-12-03 (月) 22:42:13
-- GENKI? 2007-12-27 (木) 01:04:14
-- GENKI? 2007-12-31 (月) 17:09:00
ジョイスティックを挿してなくてもキーボードの入力を受け付けるようにするには、どの部分をどう修正すればいいのでしょうか?
-- sumomo? 2009-05-25 (月) 17:29:25
-- GENKI? 2009-05-26 (火) 23:26:06
!…というかすみませんでしたー。すでに解決+αされていたのですね。ありがたく使わせていただきます!
-- 初心者? 2009-09-16 (水) 00:00:04