ページ 11

ゲームパッドのアナログ入力を補正

Posted: 2011年4月20日(水) 21:21
by みけCAT
龍神録プログラミングの館に、斜め移動のときは√2で移動量を割るというテクニックがあります。
同じようなことをアナログ入力でもやってみました。
XとYそれぞれ-1.0から1.0の範囲の四角形の入力を、半径1の円の範囲に補正します。
(x,y)に補正前の入力を渡します。
(hx,hy)に補正後の入力が入ります。

コード:

#define abs2(x) ((x)>=0?(x):(-(x)))

void analoghosei(double* hx,double* hy,double x,double y) {
	double length;
	double max;
	if(x==0 && y==0) {
		*hx=0;
		*hy=0;
		return;
	}
	if(abs2(x)>=abs2(y))max=y/x; else max=x/y;
	length=sqrt(1+max*max);
	*hx=x/length;
	*hy=y/length;
}
Windowsで動くサンプルを添付します。
ゲームパッドを接続してから起動しないとバグります。
自由に使っていただいて構いません。