OpenSiv3D icon indicating copy to clipboard operation
OpenSiv3D copied to clipboard

汎用的な内蔵MessageBoxクラス

Open ROCKTAKEY opened this issue 2 years ago • 0 comments

Discordで前にお話ししていた、ウィンドウ内に表示されるSiv3Dで実装されたメッセージボックス(以下内蔵メッセージボックスと呼ぶ)についての提案です。抽象度に応じて3段階に分けさせていただきます。もしissueを分けたほうがよければ分けますので申し付けください。また、当方はゲーム作りに長けているわけではないため、様々な方のご意見をお聞きしたいです(特に3つ目の機能)。

OKボタンやキャンセルボタンの文字列(ラベル)を自由に指定できるようにした MessageBox

追加する機能の内容 | Describe the solution you'd like

  • 機能はMessageBoxと全く同じ
  • ただし、ボタンに表示される「OK」や「キャンセル」の文字列(ラベル)を引数で指定できるようにする

その機能の追加によって解決する問題 | Is your feature request related to a problem? Please describe.

  • 多言語対応を行う場合、ネイティブのメッセージボックスならばOSのロケールに応じてよしなにしてくれるが、現状のMessageBox の場合、ボタンに表示されるラベルが固定になってしまう。指定できるようにすることで外から簡単に多言語対応できるようになる
  • 曖昧な文言の選択肢を提示することを避けることができる
    • 例: 「キャンセルしますか」のような文言に対して「OK」「キャンセル」の選択肢を提示してしまう

ボタンの数やスタイルも制御できるようにした MessageBox

追加する機能の内容 | Describe the solution you'd like

  • 引数としてボタンのラベルとスタイルのリストを与えることで、それらを指定できる

その機能の追加によって解決する問題 | Is your feature request related to a problem? Please describe.

  • 選択肢がいくつもある場合、現状ではユーザーに簡単に尋ねる方法が存在しないが、この機能によってそれを可能にできる

備考 | Additional context

  • スタイルについて、いくつかの選択肢から選ぶようにするか、ある程度汎用性を持たせるか、そもそもスタイルを与えられるようにする必要があるかは要検討
  • ユーザーの選択を表現する返り値をどのような表現にするかは要検討

メインのレンダリング(ないしは親のレンダリング)に割り込めるサブのキャンバスとしての汎用 Messagebox

追加する機能の内容 | Describe the solution you'd like

  • 内蔵メッセージボックスのようにメインのレンダリングに割り込んでキャンバスが表示される
  • そのキャンバスの中に自由に要素やボタンを配置できる
  • そのキャンバスを消してメインの操作に戻ることが可能
  • 可能であれば入れ子にできると使い勝手がよい(ポーズメニューからさらに別のメニューを開くなど)

その機能の追加によって解決する問題 | Is your feature request related to a problem? Please describe.

  • きちんとスタイルをコントロールしたい場合
    • ゲームによっては世界観が重要になってくるため、細かいスタイルや見た目をコントロールしたいときに通常の MessageBox だと無骨すぎる場合がある
  • スキルツリーのような複雑なUIを出したい場合
    • そもそも通常のMessageBoxでは不可能
    • 後でメインのレンダリングに戻ってくる前提だとシーン管理でデータを全て受け渡すのは大掛かりすぎる

備考 | Additional context

  • 自然な実装だと外側でポーズ処理を別に行う必要性が出てくるかもしれない(要検証)

ROCKTAKEY avatar Dec 12 '22 07:12 ROCKTAKEY