私は現在C++ゲームを作っています。 ロジックが計算されている間にメインループがあり、スプライトなどが描画されます。 NPCの前でタッチを押すとダイアログウィンドウが画面が表示され、キーを押すまでフリーズしますが、ゲームは実行され続けます(他の文字は動いているなど)ので、メインループはまだ実行されています。 私はうまくそれを行うために管理:今、問題が来るモードレスダイアログウィンドウに適したデザインは何ですか?
object::OnActivated() {
GameManager::doWindow("some text");
//the game is not blocked here, the game continues to run normally and will display a window on the next frame
}
:オブジェクトがアクティブになったとき、それはゲームが稼働し続けながら、テキストウィンドウを表示するダイアログ・マネージャにメッセージを送信し、それは次のようになりますダイアログが終了した後に、または例えば質問に対して「はい」を選択した場合に、何らかの関連付けアクションが発生するようにする場合です。私はこのような仕事したいの実装を持っているしたいと思います:
object::OnActivated() {
GameManager::doWindow("some text");
if(GameManager::Accepted()) addGold(100);
}
問題は、このチェック&行動は、すぐにウィンドウイベントが作成されるように実行、NOTウィンドウが閉じられたときに/ aceptedされるということです。 OnActivated()関数に関連付けられたアクションを維持しながら、これを行うための方法はありますか?関数ポインタを使用せずにこれを正しく行う方法は知られていないので、結果として使用できるすべてのメソッドに対して特定のシグネチャを持つ必要があります。 ありがとう
編集:私はこの問題に対する最も「正式な」答えが何であるか知りたいので奨励金を出しました。私はこれが非常に一般的な問題だと思っています(多くのアプリケーションとすべての現代ゲーム)、 と私は可能な限り柔軟な解決策を持っていきたいと思います。ダイアログが起動する可能性があります。 詳細: - 各ダイアログは、共通の「エンティティ」クラスから派生したオブジェクトによってトリガーされます - 同じクラスの異なるオブジェクトは、ほとんど常に、それらに関連付けられた異なるダイアログ/アクションを持ちます(たとえば、NPCのオブジェクトはすべて - "ダイアログロジック"をOnActivatedメソッドから外したり、Entityクラスの外に移動したりすることは気にしません。とにかく、NPCごとに「ランダム」なダイアログシナリオを追加したいので、ダイアログなどは別の場所に保存されます。 - しかし、ダイアログロジック自体を可能な限り近くに保ちたい単一のダイアログ。理想的には、私は "result = dialogWindow(" question? "); if(result){...}"のようにすることができるようにしたいと思います。私はそれが可能だとは確信していません
これはGameDev.SEに属していますが、私は移動のためにそれをフラグしました。 – Xeo
@ Xeo:そうですね。彼は単にモードレスのダイアログウィンドウに相当するものを作りたいと思っていますが、それはゲームのためのものではありません。 – Jon