ページ 1 / 1
ゲームパッドクラスの実装について
Posted: 2010年7月02日(金) 23:36
by わふー
こんにちは。
以前、ゲームパッドクラスをどう扱うかということについてお世話になりました。
その節はありがとうございました。
そのときのことなのですが、ゲームパッドクラスの実装自体について突っ込まれてしまいまして。
作り直して参りましたので、どこかまずい点があればご指摘いただけませんでしょうか。
一応、動作確認はしております。(私はパッドを複数持っておりませんので、2つ以上のコントローラでちゃんと動くかは試してないです……というか大体一発で上手くいくことないですので、動かない気がします 汗)
ですので、動くか動かないかという話ではなく、実装の仕方に問題がある・下手・汚い・コメントが悪い――などなどのご指摘をいただけたらと思っております。
DxLibでの実装ですが、なるべく他のライブラリに移植しやすい用にも気を付けたつもりです……が、これも自信がありません。
よろしくお願いいたします。
Re:ゲームパッドクラスの実装について
Posted: 2010年7月03日(土) 07:14
by へろりくしょん
DxLibとかC++はさっっっぱり解りませんので、ちょっと気になったとこだけ一つ。
getTargetButtonFromButtonNum() の中身でcase がずらーーーと並んでますが。
PAD_INPUT_UP とかの定義が解らないので勝手に int としますが
static const int PadButton[/url] = {PAD_INPUT_UP, PAD_INPUT_LEFT, PAD_INPUT_DOWN...... とでもしておいて
if(0 <= button_num && button_num <= 12) button = PadButton[button_num];
else error("invalid button_num");
とした方が楽でいいんじゃないですか。
button_num と PAD_INPUT_UP とかの対応に変更がある場合でも、PadButton[/url]の中身を変えるだけですみますし、バグの入り込む余地も少なくなります。
Re:ゲームパッドクラスの実装について
Posted: 2010年7月03日(土) 08:37
by toyo
その部分に関してなら私なら
int button = 1 << button_num;
で済ませるかな(32ボタンまで対応できます)
どのボタンがどの操作になるかはこのクラスの呼び出し元が扱うのでしょう
将来パッドを買い換えたときのためにPOVにも対応したいですね(十字キーがPOVに割り当てられているパッドは多いです)
// パッド入力定義
#define PAD_INPUT_DOWN (0x00000001) // ↓チェックマスク
#define PAD_INPUT_LEFT (0x00000002) // ←チェックマスク
#define PAD_INPUT_RIGHT (0x00000004) // →チェックマスク
#define PAD_INPUT_UP (0x00000008) // ↑チェックマスク
#define PAD_INPUT_A (0x00000010) // Aボタンチェックマスク
#define PAD_INPUT_B (0x00000020) // Bボタンチェックマスク
#define PAD_INPUT_C (0x00000040) // Cボタンチェックマスク
#define PAD_INPUT_X (0x00000080) // Xボタンチェックマスク
#define PAD_INPUT_Y (0x00000100) // Yボタンチェックマスク
#define PAD_INPUT_Z (0x00000200) // Zボタンチェックマスク
#define PAD_INPUT_L (0x00000400) // Lボタンチェックマスク
#define PAD_INPUT_R (0x00000800) // Rボタンチェックマスク
#define PAD_INPUT_START (0x00001000) // STARTボタンチェックマスク
#define PAD_INPUT_M (0x00002000) // Mボタンチェックマスク
#define PAD_INPUT_D (0x00004000)
#define PAD_INPUT_F (0x00008000)
#define PAD_INPUT_G (0x00010000)
#define PAD_INPUT_H (0x00020000)
#define PAD_INPUT_I (0x00040000)
#define PAD_INPUT_J (0x00080000)
#define PAD_INPUT_K (0x00100000)
#define PAD_INPUT_LL (0x00200000)
#define PAD_INPUT_N (0x00400000)
#define PAD_INPUT_O (0x00800000)
#define PAD_INPUT_P (0x01000000)
#define PAD_INPUT_RR (0x02000000)
#define PAD_INPUT_S (0x04000000)
#define PAD_INPUT_T (0x08000000)
#define PAD_INPUT_U (0x10000000)
#define PAD_INPUT_V (0x20000000)
#define PAD_INPUT_W (0x40000000)
#define PAD_INPUT_XX (0x80000000)
Re:ゲームパッドクラスの実装について
Posted: 2010年7月03日(土) 12:44
by わふー
>へろりさん
おおふ、それはgoodですね。
ありがとうございます。
>toyoさん
最初はそうしていたのです。
もし万が一、他のライブラリでパッド情報の保持の仕方が違ったら困るなぁと思って、あんな面倒なことにしてます。
まぁ何にしても汎用的に扱えなさそうな気がしますので、そんなに意味はないんですけどね(´`;
ありがとうございます。