2012-03-16 4 views
0

シンプルなドローとシミュレーションを移動するには、以下の使用しています。インターバル:200ms移動タイマ。インターバル:1ms移動定数。値:ティック2.シンプルなシミュレーション:</p> <p><strong>クロックタイマー</strong>:早送りと通常のタイマ

たび運動タイマー、画像が移動定数によって添加することにより移動します。 (すなわちpicture.X = picture.X +移動定数)

問題が早送りあります。ユーザは、いつでもシミュレーションを早送りすることができます。

これらの3つの値(クロックタイマー、ムーブメントタイマー、ムーブメント定数)を変更して、早送り実行中に整合性を犠牲にすることなくシミュレーションスピードを速くするにはどうすればよいですか?

答えて

2

高速転送の整数倍数(1x、2x、3x、...)で十分であれば、タイマハンドラ機能中にシミュレーション機能を何度か実行することができます。

私はあなたが時計タイマーで何をやっているのかよくわかりませんが、同じ原則が何にあっても当てはまります。

+0

クロックタイマーはクロックを実行します。クロックは、画像がいつ到着するかを評価します。だから早送りするとシムが同じではないかと心配している。また、私は最低であるので、私は時計タイマーをスピードアップすることはできません:1ms。どのような価値を私の動きを変えるべきですか? – helix

+0

'' picture.X + = movementConstant;の代わりに '' for(int i = 0; i AKX

+0

はい、質問する目的のために、超超超簡易版を公開しました。私はあなたの提案を試し、そのことを考えなかった。私はシムが多くのデータを計算するため、余分なfor-loopsがあまり多くないことを願っています。ありがとうございました。 編集:動作しているようですが、タイミングの不一致があります。より大きな倍数の場合。 (4x、5x ...)私は詳細なテストをします。 – helix

1

「リアルタイム」に依存しない「内部時間」を設定することができます。システムがベース速度で動作するとき、これらの2つは同期して増加します(タイマーごとに1msに設定されます)。内部時間に1msを加算します。
スピードアップ倍率が2倍のときは、すべてのタイマーティックのための内部時間。

次あなたは暗示

newposition = startposition + speed * time 
1

としてハンスのような多分機能で、内部時刻に基づいて位置を計算する必要がありますが、時間の「粒度」がありますスケジューラをABMから借りたがっているかもしれませんが、 Mason(Javaの場合)やRepast(JavaやC++)などのシミュレーションパッケージや、オープンソースのスケジューラクラスコードを見て、別の言語に翻訳してください。

関連する問題