2012-03-18 12 views
4

Qtを使用するときにゲームオブジェクトを更新してレンダリングする方法を知りたいと思います。例えば。典型的なゲームではイベントループがありますが、Qtにはexec()しかありません。 Qtを使ってゲームオブジェクトを更新しレンダリングする正しい方法は何ですか?私のゲームオブジェクトを更新するために各フレーム間の時間を取得するようなことをするにはどうすればいいですか?私はこのすべてのために別のスレッドを使用しますか?Qtを使用してゲームオブジェクトを更新/レンダリングする

私の質問は、標準のQtプロセスを避けようとしているのを除いて、this threadと全く同じです。

編集:不完全な質問をお詫び申し上げます。

int main(int argv, char **args) 
{ 
    QApplication app(argv, args); 

    ApplicationWindow window; 
    window.show(); 

    // How and where do I update my Game object? 

    return app.exec(); 
} 

class Game 
{ 
public: 
    void timeUpdate() 
    { 
     // Update game entities, etc. Should be called every frame. 
    } 

    void render() 
    { 
     // Renders game entities - where should I render to? 
     // Should be called 30 times a second, etc. 
    } 
}; 

乾杯:私はtmpearceはすでに私の質問に答えが、ここで私は他の誰が同じ問題を持っている場合には何をしようとしているの基本的な例だと信じていました。

+0

あなたの「質問」は非常に広いです。より具体的にしてください。 – Koying

+0

あなたは正しいです、それはもっと具体的かもしれません。どのように質問するかは分かりませんでした。コードサンプルを提供します。 – Mitch

+0

これはこのコミュニティにはあまり適していません。あなたはゲームエンジンの設計とゲームプログラミングを最初に研究するべきです(このためにはたくさんの良い本があります)、クラスデザイン関連のアドバイスは[http://gamedev.stackexchange.com](http://gamedev.stackexchange .com)。 –

答えて

7

Qt は、イベントループであるを有する。 QApplication::exec()によって開始されます。私はあなたの要件が更新とレンダリングまでどのようなものか分かりません。しかし、あなたは "典型的なゲーム"のようなイベントループを望んでいるように見えるので、そこからそれを取ることができると思います。

アプリケーションでは、QTimerを作成します。各イベントループで呼び出すスロットに、その信号をtimeoutに接続します。 QTimer::start(0)に電話してください:これはイベントループを通じて毎回timeout信号をトリガーします。

タイミングが合っている限り、QElapsedTimerをチェックしてください - それはあなたが探しているものと思われます。

+0

@tmpearceありがとうございました。私は謝罪します - Qtにはイベントループがないことを意味しているわけではありません。私が言いたいことは、アプリケーション内でゲームロジックをどのように実行するかがわからないことでした。 – Mitch

+1

@mitch問題ありません。私はあなたが正しい道にいると思う。 QTimerがスロットに接続することについて私がアドバイスしたことは、あなたが見逃していることです。 'Game'を' QObject'から派生させ、クラス定義に 'Q_OBJECT'マクロを組み込み、カスタムスロットを定義します(すでにこれを行う方法がわからない場合は、Qtに関する良い文書がたくさんあります)。 'start(0)'で始まった 'QTimer'をあなたのスロットに接続して、今度は更新し続けます。 GUIウィジェットをオブジェクトに同じ方法で接続することも、マスターの 'Game'クラスを介してディスパッチすることもできます。 – tmpearce

+0

非常に参考になりました、ありがとうございます。 – Mitch

関連する問題