OSDN Ticket Archive


Ticket #45282

iOS版 スクリーンゲームパッドを追加

登録: 2022-07-31 00:10 最終更新: 2022-07-31 11:10

報告者:
yknk
担当者:
yknk
チケットの種類:
機能リクエスト
状況:
完了
コンポーネント:
MIDITrail Ver.1.3.x for iOS
マイルストーン:
Version 1.3.6 for iOS (完了済み)
優先度:
5 - 中
重要度:
5 - 中
解決法:
修正済み
ファイル:
なし

詳細

メインビューにスクリーンゲームパッドを追加する。

これまでスクリーン端(左、右、下)をスワイプすることで、視点の空間移動を操作可能としてきたが、 より簡単に空間移動できるようにするため、スクリーン上にゲームパッドを表示する。

チケットの履歴

2022-07-31 00:10 更新者: yknk
  • 新しいチケット "iOS版 スクリーンゲームパッドを追加" が作成されました
2022-07-31 00:30 更新者: yknk
コメント

仕様

スクリーンに表示するゲームパッドのボタン

  • 方向キー(上下左右:前後移動と左右移動)
  • X,Yボタン(上昇、下降)

スクリーン端のスワイプ操作

  • スクリーン端のスワイプ操作はこれまで通り機能を残す。
  • スクリーン上端の回転操作はスクリーンゲームパッドでは対応しない。

スクリーン中央スワイプによる視線操作の仕様変更

スクリーン中央スワイプによる視線操作について、X軸Y軸の回転方向を従来から反転させ、一般的なゲーム操作に合わせる。 スクリーンゲームパッドの導入によって、スワイプによる視線操作の違いに違和感が生じるようになったため。 ただし設定画面で回転方向を元に戻すことを可能とする。

設定画面

  • Game Controllerセクションの名前をControllerに変更する。
  • Controllerセクションに、X軸Y軸反転のスイッチ"Touch: Invert X and Y Axis"を追加する。デフォルトはOFF。
2022-07-31 00:31 更新者: yknk
コメント

対策1 画面レイアウト

MTMainView_iPhone*.xib

  • 方向キー(上下左右ボタン)、X,Yボタンを追加。

MTMainView_iPad*.xib

  • 方向キー(上下左右ボタン)、X,Yボタンを追加。

画像ファイル

ボタン用画像ファイルを追加。

Resources/img/iPad/Button-DPadUp.png
Resources/img/iPad/Button-DPadDown.png
Resources/img/iPad/Button-DPadLeft.png
Resources/img/iPad/Button-DPadRight.png
Resources/img/iPad/Button-X.png
Resources/img/iPad/Button-Y.png
Resources/img/iPhone/Button-DPadUp.png
Resources/img/iPhone/Button-DPadDown.png
Resources/img/iPhone/Button-DPadLeft.png
Resources/img/iPhone/Button-DPadRight.png
Resources/img/iPhone/Button-X.png
Resources/img/iPhone/Button-Y.png

2022-07-31 00:31 更新者: yknk
コメント

対策2 パラメータ定義

MTParam.h

  • フォーマット文字列 MT_CONF_CATEGORY_CONTROLLER の定義を追加。
  • フォーマット文字列 MT_CONF_SECTION_TOUCH の定義を追加。
2022-07-31 00:32 更新者: yknk
コメント

対策3 一人称カメラクラス

MTScreenGamePadCtrl

  • スクリーンゲームパッド制御クラスを新規追加。
  • 既存のゲームパッド制御クラスMTGamePadCtrlとI/Fを同じにする。
  • ただし、画面のボタン押下状態を反映するためのゲームパッド状態設定メソッドを追加している点が異なる。

MTFirstPersonCam

  • メンバにスクリーンゲームパッド制御のポインタm_pScreenGamePadCtrlを追加する。オブジェクト本体はメインビューが持つ。
  • メンバに視線方向操作のX軸Y軸反転ファクタm_TouchInvertXYAxisFactorを追加。

MTFirstPersonCam::MTFirstPersonCam

  • 視線方向操作のX軸Y軸反転ファクタm_TouchInvertXYAxisFactorの初期化処理を追加。

MTFirstPersonCam::Initialize

  • ユーザ設定読み込み関数の呼び出し処理を追加。

MTFirstPersonCam::Transform

  • スワイプによる視線方向操作のデルタ値を算出するとき、X軸Y軸反転ファクタを含めるように修正。
  • デルタ値の速度因子を-1.0から+2.0に変更。この変更によりX軸Y軸の回転方向がこれまでから反転する。またスワイプによる回転速度を2倍にして、操作性を向上させる。
  • スクリーンゲームパッドの状態更新処理を追加。

MTFirstPersonCam::_TransformCamPosition

  • カメラ位置の移動にスクリーンゲームパッドの状態を反映するように修正。

MTFirstPersonCam::_LoadUserConf

  • 設定ファイル読み込みメソッドを追加。X軸Y軸反転の設定を読み込む。

MTFirstPersonCam::SetScreenGamePadCtrl

  • スクリーンゲームパッド登録メソッドを追加。メインビューが持つスクリーンゲームパッドオブジェクトのポインタを受け取る。
2022-07-31 00:32 更新者: yknk
コメント

対策4 メインビュー制御クラス

MTMainViewCtrl

  • メンバにスクリーンゲームパッドのボタンオブジェクト6個(m_pScreenGamePad_*)を追加。
  • メンバにスクリーンゲームパッド最終ボタン押下時刻m_LastTouchTimeOfScreenGamePadを追加。
  • メンバにスクリーンゲームパッドオブジェクトm_ScreenGamePadCtrlを追加。
  • メンバにスクリーンゲームパッド表示状態m_isDisplayButtonsOfScreenGamePadを追加。

MTMainViewCtrl::initWithNibName:bundle:rendererParam

  • スクリーンゲームパッドの最終ボタン押下時刻と表示状態のメンバ初期化処理を追加。
  • スクリーンゲームパッドのボタンを角丸にする処理を追加。

MTMainViewCtrl::viewWillAppear

  • スクリーンゲームパッドの最終ボタン押下時刻の設定処理を追加。

MTMainViewCtrl::startScene:isMonitor

  • スクリーンゲームパッドオブジェクトの初期化処理とシーンオブジェクトへの登録処理を追加。
  • スクリーンゲームパッドの最終ボタン押下時刻の設定処理を追加。

MTMainViewCtrl::onTapped

  • スクリーンゲームパッドの最終ボタン押下時刻と表示状態の更新処理を追加。

MTMainViewCtrl::hideAllItems

  • スクリーンゲームパッドのボタン非表示処理を追加。

MTMainViewCtrl::updateButtonStatus

  • スクリーンゲームパッドのボタン表示更新処理を追加
  • 既存のボタンは5秒放置すると非表示にしている。スクリーンゲームパッドについては2.5秒放置したら非表示にする。

MTMainViewCtrl:::onScreenGamePad_*

  • スクリーンゲームパッドのボタンイベントハンドラを追加。
  • ボタンごとにTouchDown, TouchCancel, TouchUpInside, TouchUpOutsideイベントを拾う。
  • TouchDownイベント:ボタンを押した状態に遷移したことをスクリーンゲームパッドオブジェクトに設定。
  • TouchCancel, TouchUpInside, TouchUpOutsideイベント:ボタンを離したことをスクリーンゲームパッドオブジェクトに設定。
2022-07-31 00:32 更新者: yknk
コメント

対策5 シーンクラス

MTScene::SetScreenGamePadCtrl

  • スクリーンゲームパッド制御オブジェクト登録メソッドを追加。

MTScenePianoRoll3D::SetScreenGamePadCtrl

  • スクリーンゲームパッド制御オブジェクト登録メソッドを追加。

MTScenePianoRoll3DLive::SetScreenGamePadCtrl

  • スクリーンゲームパッド制御オブジェクト登録メソッドを追加。

MTScenePianoRollRain::SetScreenGamePadCtrl

  • スクリーンゲームパッド制御オブジェクト登録メソッドを追加。

MTScenePianoRollRainLive::SetScreenGamePadCtrl

  • スクリーンゲームパッド制御オブジェクト登録メソッドを追加。

MTScenePianoRollRing::SetScreenGamePadCtrl

  • スクリーンゲームパッド制御オブジェクト登録メソッドを追加。

MTScenePianoRoll3DLive::SetScreenGamePadCtrl

  • スクリーンゲームパッド制御オブジェクト登録メソッドを追加。
2022-07-31 00:32 更新者: yknk
コメント

対策6 設定画面制御クラス

MTSettingViewCtrl::numberOfSectionsInTableView

  • コメント修正。

MTSettingViewCtrl::tableView:titleForHeaderInSection

  • セクション名を"Game Controller"から"Controller"に変更。

MTSettingViewCtrl::tableView:numberOfRowsInSection

  • コントローラセクションの項目数を修正。

MTSettingViewCtrl::tableView:cellForRowAtIndexPath

  • コントローラセクションのセル作成メソッドの名称を変更。

MTSettingViewCtrl::makeControllerCellForIndexPath

  • コントローラセクションのセル作成メソッドを追加。
  • makeGameControllerCellForIndexPathは削除。

MTSettingViewCtrl::makeGameControllerCellForIndexPath

  • Gamepadセル作成メソッドを追加。

MTSettingViewCtrl::makeControllerCellForTouchInvertXYAxis

  • Touch: Invert X and Y Axis セル作成メソッドを追加。

MTSettingViewCtrl::tableView:didSelectRowAtIndexPath

  • コントローラセクションのセル選択イベントハンドラの名称を変更。

MTSettingViewCtrl::onSelectControllerCellForIndexPath

  • コントローラセクションのセル選択イベントハンドラを追加。
  • onSelectGameControllerCellForIndexPathは削除。

MTSettingViewCtrl::onSelectControllerCellForGamepad

  • Gamepadセル選択イベントハンドラを追加。

MTSettingViewCtrl::onSelectControllerCellForTouchInvertXYAxis

  • Touch: Invert X and Y Axis セル選択イベントハンドラを追加。
2022-07-31 00:33 更新者: yknk
コメント

対策7 タッチイベント制御クラス

MTTouchCtrl

  • iPad用の画面端の幅(EDGE_WIDTH_IPAD)を80から60に変更。

スクリーンゲームパッドは画面端に寄せる必要があるため、スワイプ操作枠にボタンを隣り合わせている。 しかしボタン操作によってスワイプ操作枠に誤って触れると、意図しない操作を発生させてしまう。 ユーザのストレスを低減するため、スワイプ操作枠の幅を細くする。 ただしメインビューに配置しているスワイプ操作枠のビットマップ画像の幅は変更しない。 iPadのレイアウト(*.xib)をすべて編集する必要があるため。

2022-07-31 11:10 更新者: yknk
  • 状況オープン から 完了 に更新されました
  • 解決法なし から 修正済み に更新されました

添付ファイルリスト

添付ファイルはありません