1

現在、Silverlightゲームを進行中です。

現時点では、クラスに関連付けられた長方形がいくつかあり、一度に1つずつうまくアニメーション化されます。

            foreach (Object O in Objects)
            {
        // Generate Random Number
                    Random rnd = new Random();
                    int r = rnd.Next(40);

                    // Move Object
                    O.Move
             }

ObjectのMoveメソッドは、System.Threading.Thread.Sleep(10)を使用して、一時停止を含むすべてのアニメーションを処理します。

問題は、現時点でオブジェクトAが移動して停止し、次にオブジェクトBが移動して停止し、次にオブジェクトCになることです。

すべてのオブジェクトを一度にアニメーション化するための最良の方法は何ですか?

すぐに頭に浮かぶ戦略は、オブジェクトごとに個別のスレッドを作成することですが、これは多くの場合、うまくいかない可能性があります。

私はMVVMを使用しているので、すべてのアニメーションなどはXAMLから処理されます。

4

1 に答える 1

1

オブジェクトが画面上にそれ自体を描画する責任がある場合、各オブジェクトには独自のスレッドが必要です。ただし、GUIを操作できるのはUIThreadだけです。したがって、オブジェクトの外側のスーパーオブジェクト(ゲームボードの王)にコードを配置する必要があります。これにより、すべてのオブジェクトに位置を計算し、更新して一時停止を実行する必要があるかどうかを定義するように指示します。

UIが1つの中心点(1つのスレッド)から更新される場合は、すべてのオブジェクトの位置を計算して画面を再描画するときにのみThread.Sleepを使用する必要があります。

とにかく、オブジェクトのThread.Sleepはあまり良くありません。

サージ

于 2012-11-15T15:55:40.863 に答える