Nanashi-softプログラマ専用PSSuite開発


◇PS Suite開発 -ボタン&スティック取得-

実は,ソリューションを生成した時に最初から書かれています

		public static void Update ()
		{
			// Query gamepad for current state
			var gamePadData = GamePad.GetData(0);
		}
リファレンスの GamePadData構造体を見れば,取得できる全状態が分かります

Updateメソッド内で処理を,repaintメソッド内で描画を行うのがセオリーなので,この下にボタンを押した時のプログラムを書きます
if((gamePadData.Buttons & GamePadButtons.Left) != 0){
	//方向キーの左が押されている
}else{
	//方向キーの左は離されている
}

1つ注意しなければならない事があります
gamePadData.Buttonsは現在の状態を表すビットフラグです
ですから,switch文を使用してはいけません

↓こういうことをしてはいけない
switch(gamePadData.Buttons){	// x
	case GamePadButtons.Left:	// x
		break;					// x
}								// x
ビット列なので,AND演算をしなければなりません

○全部のボタン処理

				//Left,			//方向キーの左
				if((gamePadData.Buttons & GamePadButtons.Left) != 0){
					//ON
				}else{
					//OFF
				}
				//Up,				//方向キーの上
				if((gamePadData.Buttons & GamePadButtons.Up) != 0){
					//ON
				}else{
					//OFF
				}
				//Right,			//方向キーの右
				if((gamePadData.Buttons & GamePadButtons.Right) != 0){
					//ON
				}else{
					//OFF
				}
				//Down,			//方向キーの下
				if((gamePadData.Buttons & GamePadButtons.Down) != 0){
					//ON
				}else{
					//OFF
				}
				//Square,			//□ ボタン
				if((gamePadData.Buttons & GamePadButtons.Square) != 0){
					//ON
				}else{
					//OFF
				}
				//Triangle,		//△ ボタン
				if((gamePadData.Buttons & GamePadButtons.Triangle) != 0){
					//ON
				}else{
					//OFF
				}
				//Circle,			//○ ボタン
				if((gamePadData.Buttons & GamePadButtons.Circle) != 0){
					//ON
				}else{
					//OFF
				}
				//Cross,			//× ボタン
				if((gamePadData.Buttons & GamePadButtons.Cross) != 0){
					//ON
				}else{
					//OFF
				}
				//Start,			//STARTボタン
				if((gamePadData.Buttons & GamePadButtons.Start) != 0){
					//ON
				}else{
					//OFF
				}
				//Select,			//SELECTボタン
				if((gamePadData.Buttons & GamePadButtons.Select) != 0){
					//ON
				}else{
					//OFF
				}
				//L,				//L ボタン
				if((gamePadData.Buttons & GamePadButtons.L) != 0){
					//ON
				}else{
					//OFF
				}
				//R,				//R ボタン
				if((gamePadData.Buttons & GamePadButtons.R) != 0){
					//ON
				}else{
					//OFF
				}

左右スティックの状態も同様に GamePadData構造体に入っています

左スティックの傾き
gamePadData.AnalogLeftX
gamePadData.AnalogLeftY
右スティックの傾き
gamePadData.AnalogRightX
gamePadData.AnalogRightY

触っていない状態が 0.0fです
左上に最大に倒すと -1.0fで,右下に倒すと 1.0fです

○左右のスティック処理

				//AnalogLeft,		//左スティック
				float left_x = gamePadData.AnalogLeftX;
				float left_y = gamePadData.AnalogLeftY;
				if(-0.01f < left_x && left_x < 0.01f
				&& -0.01f < left_y && left_y < 0.01f){
					//アイドル状態
				}else{
					//左スティックが操作されている
				}
				//AnalogRight,	//右スティック
				float right_x = gamePadData.AnalogRightX;
				float right_y = gamePadData.AnalogRightY;
				if(-0.01f < right_x && right_x < 0.01f
				&& -0.01f < right_y && right_y < 0.01f){
					//アイドル状態
				}else{
					//右スティックが操作されている
				}
なぜ,アイドル状態を判定するのに 0.0fと行わないのかと言うと,
PS Vita実機で値を取得した際に,常に細かい範囲でぶれている為です(汗


スマフォ版では,画面上にパッド操作パネルを出す事が出来ます
端末のメニューボタン→コントローラ設定→画面コントローラにチェックを入れる

PS Suiteがサポートしているボタン全てが操作可能です

ゲーム設計時には必ずコントローラーだけ,タッチパネルだけでも操作できるようにしましょう
これはパソコンゲームで,キーボードだけ,マウスだけで操作できるようにするのと同じ常識の話です



TOPプログラマ専用PSSuite開発