スクロールしてみてください・・・
はい おわりです!
これがマウススクロールアートです。うそです、そのなものありません、いま作った名前です。。。(苦笑
おそらく自称日本初!?? IE8にも対応したhtml5のcanvasをつかったアクションクソゲームです。。
クソまで条件にいれれば本当に日本初かも!?(笑
職場の方から、google のexcanvasつかえばIEでもhtml5に対応できるという優良情報をいただき、
グーグル先生のお力を借りて、IE8でも動く簡単クソゲームができました。
現状html5ですが、IEだけ、対応しておらず対応は9から対応のようです。
この問題点をおぎなってくれるのが、googleのexcanvas先生です。
下記ように記述してあげるとIEだけこのファイルを読み込ませ、他のブラウザではコメント扱いさせるようです。よくある、条件付きコメント的な感じだと思います
たださすがに使えない機能などもあるので、注意が必要です。
「ボタンが押されているかどうか」だけの判定だと、
ボタンを押している間、同じ処理を何度も実行してしまう。
(Aで購入 ⇒ Aを押している間、毎秒30回購入、など)
「押した瞬間」「離した瞬間」「押しっぱなし」「離しっぱなし」
などを判定できるようにしておく。
「現在のジョイスティックのデータ」と、「1回前のジョイスティックのデータ」を
くらべる事で、判定が可能になる
●押した瞬間
前回・・・離されている(0)
現在・・・押されている(1)
0 → 0 → 0 → 0 → 1 → 1 → 1 → 0 → 0 ・・・・・
●離した瞬間
前回・・・押されている(1)
現在・・・離されている(0)
1 → 1 → 1 → 0 → 0 ・・・・・
●押しっぱなし
前回・・・押されている(1)
現在・・・押されている(1)
0 → 0 → 1 → 1 → 1 → 1 → 0 ・・・・・・
●離しっぱなし
前回・・・離されている(0)
現在・・・離されている(0)
1 → 1 → 0 → 0 → 0 → 0 → 1 ・・・・・・
後はプログラムで、「前回のジョイスティックのデータ」を保存し
現在のデータとくらべてやれば、判定できる。
●前回の値を保存
joyGetPosEx()の直前に、JoyDataを保存しておけば、前回のデータとして使える。
JOYINFOEX JoyData; //現在のジョイスティックのデータ
JOYINFOEX JoyData2; //前回のジョイスティックのデータ
JoyData2 = JoyData;
joyGetPosEx(JOYSTICKID1,&JoyData) //JoyDataを更新(現在の値)
サンプル(押した瞬間を判定)
・JOYINFOEX JoyData;
JOYINFOEX JoyData2; を外部変数として宣言
・GameCreate()内で、JoyDataの設定をしておく
・GameMain()を変更
Static int A; //Aボタンを押した瞬間に+1される。
JoyData2 = JoyData;
joyGetPosEx(JOYSTICKID1,&JoyData);
if(JoyData.dwButtons & 1) != 0 //今回押されていて
&& (JoyData2.dwButtons & 1) == 0) //かつ前回は離されていたら
{
A++; //押した瞬間の処理
}
※後は、描画部分でAをwsprintf(),TextOut()で表示。
※同じ考え方で、十字キーも判定できる。
十字キーの場合、「押されているかどうか」だけで判定できないので、
「前回のNum(0~9)」を保存し、
「変化した瞬間かどうか」を判定する。
Num2 = Num;
JoyData2 = JoyData;
joyGetPosEx(~~~);
※JoyData.dwXpos、dwYposを使ってNumを求める
※ボタン押した瞬間などの判定
if(Num2 != Num)
{
十字キー変化の瞬間
}
取得したデータの判定
●十字キーのデータ
dwXpos ・・・十字キーの左右を表す。
左 ⇒ 10000以下
中央⇒ 30000前後 の数が入る。
右 ⇒ 50000以上
dwYpos ・・・十字キーの上下を表す。
上 ⇒ 10000以下
中央⇒ 30000前後 の数が入る。
下 ⇒ 50000以上
●ボタンのデータ
各ビットが、「ボタンが押されているかどうか」を表す。
………0000_0000
・・・・ ・・BA
0ビット目・・・Aが押されていたら1
離されていたら0
1ビット目・・・Bが押されていたら1
離されていたら0
ボタンを調べる時は、ビット操作を使って
調べたいビットのみを調べる。
Aボタン・・・JoyData.dwButtons & 1
が0でなければ(押) …0001
Bボタン・・・JoyData.dwButtons & (1<<1)
が0でなければ(押) …0010
サンプル
・GameMain()の文字表示部分
//十字キー左右
if(JoyData.dwXposos <= 10000)
{
※「X軸 = 左」と表示
}else if(JoyData.dwXpos >= 50000)
{
※「X軸 = 右」と表示
}else
{
※「X軸 = 中央」と表示
}
//十字キー上下
if(JoyData.dwYpos <= 10000)
{
※「Y軸 = 上」と表示
}else if(JoyData.dwYpos >= 50000)
{
※「Y軸 = 下」と表示
}else
{
※「Y軸 = 中央」と表示
}
//Aボタン(ボタン0)
if(JoyData.dwButtons & 1)
{
※「A = 押」と表示
}else
{
※「A = 離」と表示
}
//Bボタン(ボタン1)
if(JoyData.dwButtons & (1<<1))
{
※「B = 押」と表示
}else
{
※「B = 離」と表示
}
ジョイスティックの使用
※「マイコンピュータ」→「コントロールパネル」→「ゲームコントローラ」で、
「2軸 2ボタンのジョイスティック」があるかどうか確認
無い場合は、追加しておく。
また各自で調整しておくこと。
1、ジョイスティックデータの取得
・winmm.libが必要なので、追加していない場合は
#pragma commentなどで追加しておく。
・joyGetPosEx関数で、
JOYINFOEX型の構造体の中に、データをうけとる。
●JOYINFOEX型構造体
主なメンバ
long dwSize ・・・構造体事態の大きさを代入しておく。
long dwFlags ・・・どんなデータを取得するか。
JOY_RETURNBUTTONS(ボタンのデータ)
JOY_RETURNX(十字キー左右)
JOY_RETURNY(十字キー上下)
の3つを「|」(OR)でつなげて指定。
long dwXpos ・・・十字キー左右のデータをうけとる。
long dwYpos ・・・十字キー上下のデータをうけとる。
long dwButtons ・・・ボタンのデータをうけとる。
例、
JOYINFOEX JoyData;
JoyData.dwSizeize = sizeof(JOYINFOEX)
JoyData.dwFlags = JOY_RETURNBUTTONS | JOY_RETURNX | JOY_RETURNY;
●joyGetPosEx関数
定義 : MMRESULT joyGetPosEx(ジョイスティックID,JOYINFOEX*);
引数 : ジョイスティックID・・・JOYSTICKID1 か
JOYSTICKID2 を使う。
今回は、JOYSTICKID1。
JOYINFOEX * ・・・・・データをうけとるJOYINFOEX構造体のアドレス
戻値 : MMRESULT ・・・・・・ JOYERR_NOERRORで成功。
例、
MMRESULT ret;
ret = joyGetPosEx(JOYSTICK1,&JoyData);
※JoyDataの中にジョイスティックのデータが入る。
ret == JOYERR_NOERRORなら成功
サンプル
・winmm.libを追加していない場合、
WinMain()にあるファイルに
#pragma comment(lib,”winmm.lib”)
を追加
・JOYINFOEX JoyData; を外部変数で宣言
GameCreate()など、ゲームの準備をする所で
JoyData.dwsize = sizeof(JOYINFOEX);
JoyData.dwFlags = JOY_RETURNBUTTONS | JOY_RETURNX | JOY_RETURNY;
を代入しておく。
・GameMain()で、
MMRESULT ret;
ret = joyGetPosEx(JOYSTICKID1,&JoyData);
を実行
JoyData.dwXpos,JoyData.dwYpos,JoyData.dwButtons
の3つを、wsprintf(),TextOut()で表示して確認。