SDL_pad

since: 2004-02-04 update: 2005-05-20 count:
SDL_pad

SDL_pad 0.1.5

SDL_pad はプリミティブすぎて少し使いにくい SDL の event の抽象層です。

ダウンロードはこちら

機能

以下のような機能を持っています。

予定機能

以下のような機能を実装する予定ですが、未実装です。

検討中

以下のような機能を検討中です。

→さらに上のレイヤーを作ることを検討してはどうか。

不具合

以下のような不具合が存在しています。

リファレンス

定数群は SDL_padconst.h に記述されています。

以下のような関数を提供します。

基本的な関数

初期化を行います。

SDL_Init の後に実行して下さい。 Joystick のサブシステムが Init されていなければ Init します。 存在すれば、 Joystick を二つまで Open します。

成功すれば 0 、失敗すれば -1 を返します。

イベントを集めます。

イベントキューには影響を与えません。 降下時間判定を正確に行いたい場合は 1フレームに一度だけ呼出すようにして下さい。

flags は以下の定数の論理和で表現します。

PAD_PUMP_USER
PAD_PUMP_KEYBOARD
PAD_PUMP_JOYSTICK
PAD_PUMP_MOUSE
PAD_PUMP_EVENT
PAD_PUMP_EVERYTHING

ボタンの降下状態を調べます。

押されているのであれば 1 以上の値を、 押されていなければ 0 以下の値を返します。 押されている時間は正の返り値の値で、 離されている時間は -(負の返り値)+1 で調べることができます。

id は SDL_padconst.h に定義されている PADK_*, PADM_*, PADJ*, PADE_* もしくはユーザボタン ID です。 これを以下ではボタン ID と総称します。

Pad_GetButton のヘルパ関数群です。

それぞれ押された瞬間、押されている、離された瞬間、離されている、 場合に 1 を、そうでない場合に 0 を返します。

ユーザ定義ボタン、十字キー

ユーザボタンを登録します。

ユーザボタンには 8つまでのボタンを割当てることができます。

id はユーザボタンの ID として有効な、正または 0 の整数に限ります。 addid は PADK_*, PADM_*, PADJ*, PADE_* に限ります。

成功すれば 0 を、失敗すれば -1 を返します。

十字キーの状態を取得します。

id は十字キーの ID として有効な、正または 0 の整数を使用して下さい。

返り値は

PAD_AXIS_NONE = 0
PAD_AXIS_UP = 1
PAD_AXIS_DOWN = 2
PAD_AXIS_LEFT = 4
PAD_AXIS_RIGHT = 8
PAD_AXIS_UPLEFT =  PAD_AXIS_UP | PAD_AXIS_RIGHT
PAD_AXIS_UPRIGHT =  PAD_AXIS_UP | PAD_AXIS_LEFT
PAD_AXIS_DOWNLEFT =  PAD_AXIS_DOWN | PAD_AXIS_LEFT
PAD_AXIS_DOWNRIGHT =  PAD_AXIS_DOWN | PAD_AXIS_RIGHT

のどれかです。

十字キーを登録します。

id は有効な十字キーの ID です。 upid, rightid, downid, leftid は有効なボタン ID です。

Pad_AddAxis のヘルパ関数群です。

設定ファイル制御

ユーザボタンの設定ファイルを読み込みます。

設定ファイルの書式については別記します。

file は有効なファイルパス文字列です。 bnames は NULL 終端した文字列の NULL 終端した配列で、 配列のインデックスのユーザボタン ID に文字列で名前を対応させます。 anames は NULL 終端した文字列の NULL 終端した配列で、 配列のインデックスの十字ボタン ID に文字列で名前を対応させます。

成功すれば 0 を、失敗すれば -1 を返します。

Pad_Load のヘルパ関数です。

bnames として

"A_BUTTON", "B_BUTTON", "C_BUTTON", "D_BUTTON", "E_BUTTON",
"UP_BUTTON", "RIGHT_BUTTON", "DOWN_BUTTON", "LEFT_BUTTON",
"END_BUTTON", NULL

が、anames として

"AXIS1", "AXIS2", NULL

が使われます。

Pad_Load の RWops 版です。

ユーザボタンの設定ファイルを書き込みます。

引数や返り値の意味は Pad_Load* と同様です。

ジョイスティックの threshould

それぞれジョイスティックの threshould を設定することができます。 axis には PAD_AXIS_UP, PAD_AXIS_RIGHT, PAD_AXIS_DOWN, PAD_AXIS_LEFT の いずれかを使用して下さい。

SDL_Event の補助

基本的に SDL_Event は使わないプログラムで使うことが想定されていますが、 SDL_Event を使用する場合の補助として便利な関数なので追加しました。

SDL_Event から PadKey に変換することができます。 この帰り値は switch 文内で、

case (PADK_UP):
case (PADJ1_UP):

などと記述できて便利です。

設定ファイル

設定ファイルの仕様は以下のようなものです。

各行はキーとそれに対応させる値で構成され、

<KEY_NAME> = <VAL1_NAME> <VAL2_NAME> ...
<KEY_NAME> <VAL1_NAME> <VAL2_NAME> ...
<KEY_NAME>: <VAL1_NAME>,<VAL2_NAME> ...

などと様々な方法で記述することができます。 SDL_pad としては最初の形式を推奨します。 KEY_NAME, VAL_NAME としては a-zA-Z0-9_ が有効で、 それ以外はセパレータとして認識されます。

KEY_NAME が bnames 引数に与えられている場合は、 VAL*_NAME のボタンをユーザボタンに割当てます。

KEY_NAME が anames 引数に与えられている場合は、 VAL1_NAME,VAL2_NAME,VAL3_NAME,VAL4_NAME のボタンを それぞれ 上,右,下,左 のボタンとして十字ボタンを割当てます。

KEY_NAME が PADCONFIG_ で始まっている場合は、 SDL_pad の動作を制御する特殊な指示語となります。 現状では以下のようなキーが使用可能です。

PADCONFIG_JOYSTICK_THRESHOULD_RIGHT
PADCONFIG_JOYSTICK_THRESHOULD_LEFT
PADCONFIG_JOYSTICK_THRESHOULD_UP
PADCONFIG_JOYSTICK_THRESHOULD_DOWN

以上の仕様に合致しない場合、その行は無視します。

全体としてかなり甘い認識を行っています。 これは既存の形式との整合性が取れる確率を上げる、 他の設定が混在したファイルを解析できる、 などを目的としています。 ですが、解析中に警告を生成して取得する機能や、 ファイル解析を厳しく行う機能を実装する予定です。

サンプルとして padrc というファイルが入っていますのでご参照下さい。

メモ

ここからマニュアルっぽくない雑記になります。

ご意見頂ければとても嬉しいです。

SDL_pad.c で全部 include するってやり方は 割と手軽で好きなんですけどどうなんでしょう。

LGPL ライセンスにて配布します。

misc ディレクトリの下は BSD ライセンスに従います。 今のところ D のインポートライブラリがあります。

Pad_Pump のオプションいらん気が…

Unix では $(HOME)/.sdlpadrc 、さて、 Windows では? レジストリでファイル名指定、かな?

気がつけば Joystick number は 1 origin でボタンは 0 origin。 ひどい。

更新履歴


top
なにかあれば下記メールアドレスへ。
hamaji _at_ nii.ac.jp
shinichiro.h

home / index

全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。

shinichiro.hamaji _at_ gmail.com / shinichiro.h