プログラムTIPS

DEMO PROGRAM ヘキサドライブでは様々な研究開発をしています。その一部を紹介。

アナログスティックの値(2009年9月11日)

今回はアナログスティックの入力について少し話をしたいと思います。

就職作品などでコントローラーの入力を取ってきてゲームに使用したりすると思います。
最近ですとXbox360のコントローラをパソコンに差せばすぐ使えるので、お手軽ですよね。

アナログスティックの値は、中心からの位置が返ってきます。
20090911_00.png

スティックを触っていない状態でも中心部分では小さな値が入ってしまいます。
これはハード的にどうしようもない部分なので、
中心から一定距離は反応させないようにする必要があります。
20090911_01.png

このときに、やってしまいがちな判定として、次のようなものがあります。

if( abs(x) < deadValue ) {
    x = 0;
}<br />
if( abs(y) &lt; deadValue ) {
&nbsp;&nbsp;&nbsp; y = 0;
}

こう記述してしまうと、中心部分はいいのですが、赤い部分の細かい値も消されてしまうため、黒い軸上へと補正されてしまいます。
20090911_02.png

これはもったいない!
というわけで、補正する場合は次のような式がいいですね。

if( (abs(x) &lt; deadValue) &amp;&amp; (abs(y) &lt; deadValue) ) {<br />
&nbsp;&nbsp;&nbsp; x = 0;<br />
&nbsp;&nbsp;&nbsp; y = 0;<br />
}

こうすれば赤い部分のみ、値が0に補正されます。
20090911_03.png


もちろん、中心からの距離を求める方がより綺麗に円形で補正できますよ。

少し変わった方法として、距離をn乗させるという手法もあります。
中心からの最大距離を1として、その値をn乗すると次の図のような形になります。
20090911_04.png

青い線がアナログスティックから取得した値です。それをn乗した値が下の青以外の線です。
(左の灰色部分は、先ほどの灰色の円と同じく、0に補正する範囲です)
こうしておけば中心付近の値がほぼ0になりますので、0に補正する処理が不要となります。
中心でもすごく細かい値が入るので、何か細かい操作をさせたいときに有効です。
また、0に補正する処理が無くなるため、急に入力が入った感じなどを消すことが出来ます。
よりアナログ的な入力ができるわけです。
nの値をどの辺に落ち着けるかは、実際のゲームを触りつつ、調整していくのがいいと思います。

こうした工夫でゲームの操作感が良くなったりすることは多いと思います。
工夫はゲームを面白くするスパイス、といったところでしょうか ^^

【免責事項】

本サイトが提供している情報に関しては、安全性等、いかなる保証もされません。 株式会社ヘキサドライブは、これらの情報をあなたが利用することによって生ずるいかなる損害に対しても一切責任を負いません。

【著作権】

本サイトが提供しているコンテンツについては、特に断りのある場合を除き、株式会社ヘキサドライブが著作権を有します。