私はゲームで作業しており、メインメニューを開発中です。そこには設定シーンがあります。このシーンにはいくつかのタブがあり、ビデオタブでは解像度の切り替えが可能なドロップダウンメニューが必要です。今、後半の部分で私はロジックを理解していますが、XNAフレームワークを使用すると、ドロップダウンメニューのロジックを理解できません。助けをありがとう:)Monogame/XNAのドロップダウンメニュー
答えて
私は実際に私のゲームのドロップダウンをしたあなたはそれについて考えるとき、それは本当に難しいことではありません。まず、DropDownContainer
クラスとDropDownElement
クラスが必要です。 DropDownContainer
は、現在選択されているオプションが表示されるドロップダウンの上部です。 DropDownElement
は、ユーザーがDropDownContainer
をクリックしたときに表示される選択可能なオプションです。
- があなたの
DropDownContainer
クラスでDropDownElement
の配列を作成します。ここではは、コードがどのように動作するかです。
DropDownContainer
のコンストラクタでは、DropDownElement
の数と各文字列が特定のDropDownElement
のテキストである文字列の配列を渡します。DropDownElement
のコンストラクタを文字列にし、Draw(spriteBatch)
メソッドで、その文字列をDropDownElement
のテクスチャに描画します。コンテナの位置として
Vector2
を渡すと、要素を配置するためのベースとしても使用されます。DropDownContainer
のコンストラクタでの例のループ:for (int i = 0; i < elements.Count; i++) { elements[i] = new DropDownElement(spriteFont, textArray[i], new Vector2(containerPosition.X, (containerPosition.Y + (34 * (i + 1))) + 2), this.textColor, content); // 34 = DropDownElement's Texture height }
- はあなたの資産をロードできるように、両方のクラスのコンストラクタで
ContentManager content
に渡していることを確認します。 - それは
X
とY
だこれらのクラスの両方のためのバウンディングRectangle
を持って(int)containerPosition.X, (int)containerPosition.Y
とWidth
とHeight
がTexture2D
の寸法されています。DropDownContainer
で - の
Update(gameTime)
方法は、カーソルがbounds
内であれば、チェックを持ち、ユーザーがクリックこのようなフラグを変更する場合:DropDownContainer
でclicked = !clicked;
- の
Draw(spriteBatch)
方法、if (clicked)
をチェックによってelements
配列を描きますそれをループします。 - DropDownを
private DropDownContainer dropDown = new DropDownContainer(...);
のようにインスタンス化し、対応するメソッドを呼び出します。 - どのオプションが選択されているかを確認するには、
DropDownElement
のText
プロパティを公開してください。 - 完了したら、線形補間を使用してマウスのホバー効果やテキストの色のフェードイン/アウトを追加できます。
私はXNAゲーム用のTextBoxを作成しましたが、重いP/Invokeを扱っています。基本的なドロップダウンの仕方がわからないので説明が複雑すぎます。あなたのロジックを持ついくつかの問題があります
が、私はそれらをハイライトします:
編集は以下のコメントに対処するために取得しますstring
プロパティなし
- を/のテキストを設定しますどの要素が選択されたかをチェックするには?例えば。
if (container.Text == "text of first element") { /* user chose the lowest resolution */ }
Text
プロパティがない場合、テキストをコンストラクタに渡さない限り、のテキストを設定する方法はありません。enum
にどのように値1600x900
を直接追加しますか?enum resOptions { _800x600 = 0, _1280x1024 = 1, _1920x1080 = 2, // etc. }
そして多分:私はあなたを誤解していない限り、あなたはこのような何かをしたとしても
enum
...
で(1600x900が文字列である)string
を置くことができる方法はありません彼らはDropDownElement
配列で同じ方法で注文してもらえますが、ユーザーがクリックしたオプションを確認するために独自の方法を実装する必要があります... DropDownContainer
のText
プロパティの確認につながります。
enum
を使用することに対する強硬なアドバイスは、すでに複雑なDropDownアルゴリズムを複雑にしすぎているためです。どのオプションが選択されたかを確認する方法を書くのに、はるかに時間がかかります。
私は、ユーザーのクリックにContainer
秒のクリックElement
にText
'がText
を設定しますし、それは私が選択したオプションをチェックします方法です。 enum
でこれをやってもよければ、簡単なやり方についてのヒントを教えてくれたので、あまり助けになることはないでしょう。別の方法でやりたければ、コードを自分で書く必要があります。このサイトのアイデアはすべて「自分のコードを書いてください」ではなく「適切に書き込む方法を教えてください」自分自身 "です。
少ない労力と少ないコードでそれをやり遂げることができれば、複雑なことはプログラミングの面で悪いことです。 DropDown
の機能を拡張する予定がある場合にのみ、それを複雑にするのは良いことです。しかし、あなたの場合、私は正直なところ、Text
をこのように設定する点はありません。シンプルで効果的なソリューションを破棄し、あなたが確信していないものを追求するのはなぜですか?
ご不明な点がございましたら、お気軽にコメントしてください。
私は既存のUIライブラリを使用することをお勧めします。高度なUIシステムをゼロから実装しようとするのではなく、
ニースのUIライブラリー:Empty Keys
私は教室環境にいるため、このことを教えていただきありがとうございます。残念ながら、管理者なしでこのマシンにサードパーティライブラリをダウンロードすることはできません。 – Matttheawesome1
私はこれをドロップダウンメニューとしてはしません。
これはマウス/キーボード中心のUI要素です。コントローラを操作している場合、ユーザーがこれとやりとりする方法を検討してください。
このゲームをコントローラでプレイする予定がない場合でも、ドロップダウンメニューのような複雑なUI要素を避けると、UIに気を散らすのではなく、プロトタイピングを簡単に続けることができます。
提案されたソリューション: 「NxMから解像度を変更する」を表すメニュー項目を選択すると、垂直リストから特定の解像度を選択するための新しいサブメニューで現在のメニューを置換またはオーバーレイします。終了すると、前のメニューに戻ります。
- 1. ドロップダウンメニュー
- 2. ドロップダウンメニュー
- 3. ドロップダウンメニューのタイトルをドロップダウンメニューに合わせる
- 4. ドロップダウンメニューのドロップダウンメニューが機能しない
- 5. Twitter Bootstrapのドロップダウンメニュー
- 6. HTMLのドロップダウンメニュー
- 7. ドロップダウンメニューの整列
- 8. Foundation Reactのドロップダウンメニュー
- 9. Boostrapドロップダウンメニューのカスタマイズ
- 10. ビデオのドロップダウンメニュー?
- 11. ドロップダウンメニューの作成
- 12. Kivy Pythonのドロップダウンメニュー
- 13. は、Javascriptのドロップダウンメニュー
- 14. Coco2dゲームのドロップダウンメニュー
- 15. JavaScriptのドロップダウンメニュー(Enjin)
- 16. オペラのドロップダウンメニュー
- 17. MD-TABSのドロップダウンメニュー
- 18. WPのドロップダウンメニュー
- 19. レスポンシブデザインのWordPressドロップダウンメニュー
- 20. フラッシュのドロップダウンメニュー
- 21. processing.jsのドロップダウンメニュー
- 22. C#のドロップダウンメニュー
- 23. ドロップダウンメニューのレスポンスメニュー
- 24. HTML5タグのドロップダウンメニュー
- 25. ドロップダウンメニューのDataGridView
- 26. Javascriptのドロップダウンメニュー
- 27. ドロップダウンメニューのCSSトラブル
- 28. iPhoneのドロップダウンメニュー
- 29. ドロップダウンメニューのフッタフッタ
- 30. jQueryのドロップダウンメニュー
私はここで少し考えています。ドロップダウン要素のTextプロパティを使用する代わりに、デフォルトの解像度スケール(たとえば1600x900)の列挙子を作成し、その値に設定できますか?もちろん、必要に応じてユーザーが独自のカスタム解像度を入力できるようにします。 – Matttheawesome1
@ Matttheawesome1、私はあなたの質問に答えるための答えを編集しました。さらなるご質問がある場合は、お気軽にコメントしてください。 – PowerUser
ああ、私は今、愚かな気がします。列挙型は文字列を使用できないことを忘れてしまいました。それは誰でも知っていればなぜですか?他の質問にリンクすることもできます。 – Matttheawesome1