2011-05-26 20 views
0

私と私の同級生は、夏にゲームをすることに決めました。最初はテキストベースのコンソールアプリケーションにすることにしましたが、Qtを使用してゲーム用のGUIを作成することは可能です。私はちょっと周りを遊んで、ウィジェットと無関係なものを作ることができましたが、一つのことをすることができませんでした。たとえば、私たちのゲームにはPlayerクラスが含まれています。私はmain.cppにダミーのプレーヤーを作りました。その後、ボタンを押すと、プレーヤーの情報をラベルに表示しようとしました。数多くの試みの後、私がそれをやり遂げることができた唯一の方法は、mainwindow.cppでプレーヤーを作ることです。 main.cppで作成されたプレーヤーの情報を表示する方法はありますか?バトルウィンドウやインベントリウィンドウなど、さまざまなウィンドウでデータにアクセスできるようにするにはどうすればいいですか?テキストベースのゲームにQtを使ったGUIを作成する

答えて

2

main.cppを可能な限りリーンにすることは良いことですが、あなたのケースに多くのコードを含めるべきではありません。

私が正しく理解している場合、同じQApplicationで実行している複数のウィンドウ(親なしのQWidgetsまたはQMainWindows)があり、それらの間でデータを共有したいのですか?両方のウィンドウでPlayerポインタを共有してみませんか?

あなたのmain.cppには次のようになります。

QApplication app(argc,argv); 
YourWindows1 mw1; 
YourWindows2 mw2; 
Player player; 
mw1.setPlayer(&player); 
mv2.setPlayer(&player); 
mw1.show(); 
mw2.show(); 
app.exec(); 

より多くの空想の道を、シングルトンを使用することができます。このシングルトンはあなたのPlayerインスタンスを所有して保持することができ、すべてのウィンドウはこのシングルトンにいつでも静的にアクセスしてPlayer情報を取得できます。あなたが学ぶのに役立つ何かになるかもしれません。

注:私は...多分あなたはあなたのトラブルを引き起こしているかについての詳細を共有することができ、問題はここにあるまさに私はあなたの主な機能という点で、このスレッドで他のポスターに同意

+1

私の問題を引き起こしているのは、例として、Name、HP、SPをテキストボックスに入力してボタンを押してPlayerオブジェクトを作成するウィンドウがあります。 1つのウィンドウで作成されたプレーヤーを他のウィンドウで使用するには、どのようにして作成が完了したらそのプレーヤーを保存することができますか?あなたはまた、メインはできるだけ痩せていると言いました。それは、バトルや目録のコードのようなすべてのコードが適切なウィンドウに配置されることを意味しますか? – David

+0

あなたのアプリケーションのアーキテクチャーを知る必要があります。ウィンドウ間で共有されているもの、GUIがあるかどうか、インスタンスが属しているものなどを把握するのに時間を費やすことを恐れないでください...適切なクラスに適切なコードを入れるべきかどうか尋ねるなら、 :)。ここでの良いスタートは、Qtの例と時間を費やすことです。Qtの方法を学び、非常に迅速に実装します!あなたがQtCreatorを使用しない場合は、例を用意する必要があります。 – vrince

+0

あなたの助けていただきありがとうございます。私はまだQtが新しくなって以来、どのようなことが起こっているかを見ていきます。 – David

1

一般的なQtアプリケーションでは、main.cppは単一のアプリケーションUIオブジェクトを開始してからQtのイベントハンドラに制御を移します。そのモデルから逸脱する可能性がありますが、あなたがQtをよく経験していない限り、それは推奨されるものではありません。

0

が表示されません可能な限り無駄なく絶対に保管してください。ゲームの新しいインスタンスを生成するだけで、ゲームループや状態管理マネージャが残りの部分を処理するようにします。

class Game{ 
    Game(); 
    ~Game(); 
    int OnExecute(); 
}; 

int Game::OnExecute(){ 
    while(running){ 
     // do game stuff 
    } 
    return 0; // No errors, game closed correctly. 
} 

int main(int argc, char* argv[]){ 
    Game myGame; 
    myGame.OnExecute(); 
} 

あなたの初期化メソッド/コードの全てが前のゲームはそのメインループに入る、OnExecuteイベント機能の中に含まれている:それは基本的にこのような何かに沸きます。メインのwhile(running)ループの中では、エンティティ位置、物理更新、AI更新などのロジック計算を制御するフレームごとの更新およびレンダリング機能にコールをかけ、そのフレームのすべてをレンダリングします。これは明らかに超単純な戦略ですが、ゲームエンジンがどのように機能しているかを正確に把握するのには間違いありませんでした。

今のところ、Qtに関する限り、私はあなたが試みていることを正確に試しましたが、それは容易ではありません。 Qtは、ゲーム内のインターフェイスなどで動作するように調整することはできますが、主にゲーム以外のアプリケーションでの使用を想定しています。あなたのプログラムにシンプルなフォームやボタンが必要な場合は、優れた機能を提供しますが、カスタムデザインのHUDなどでは、他の場所を探していて大変な労力を節約したいと考えています。しかし、ゲーム向けの膨大な数の拡張可能なGUIライブラリがあります。ほとんどのグラフィックス/ゲームエンジンはそれに基づいており、かなりうまく統合されるので、OpenGLをベースにしたものを探してみることをお勧めします。

関連する問題