ActiveDocument.Characters にループがあります。
ドキュメント領域へのデバイス コンテキスト ハンドルを取得しました。オーバーレイを表示して、テキストを左から右に 1 行ずつスムーズに強調表示したいと考えています。
目的は、アプリケーションが特定の速度で読むように誘導しているかのように、スムーズなアニメーションを実現することです。
もちろん、ループ自体はまったく滑らかではありません。アルゴリズムの提案。
アニメーションのどこがスムーズではないのですか? 美しくアニメーションしています。素晴らしい仕事をしました:)
次の長方形の描画方法について言及している場合、私は信じています (そして、私は間違っている可能性があります) this.RenderSpeed
。値が小さいほど、よりスムーズにアニメーション化されます。現在のコードでは、 が最高でthis.RenderGuidePoint.Offset(1, 0);
が悪いように見えますthis.RenderGuidePoint.Offset(25, 0);
。
私は画像の専門家ではありませんが、ここに私が考えることができる例があります (ただし、最高の例ではありません)。あなたが見ている映画を想像してみてください。それはすべてフレームレートに依存します。fps が通常の人間の目が処理できる範囲を超えている場合、画像がより急激に表示されることに気付くでしょう (例: 2 倍速または 4 倍速を使用してムービーを早送りする場合)。同様に、コードに .Offset() を追加すればするほど、四角形の描画が急になります。
それで、解決策は何ですか?
描画されている次の長方形の「X」に対しては多くのことを行うことができないため、タイマーの時間間隔を操作して、作成をよりスムーズにすることができます (長方形の再描画)。テスト目的で、いくつかの値をハードコーディングしましたが、出力に満足しました。私が得ている結果も得られるかどうかを確認してください。
private void ToolStripComboBoxSpeed_SelectedIndexChanged (object sender, System.EventArgs e)
{
this.RenderSpeed = (int) this.ToolStripComboBoxSpeed.SelectedItem;
Switch (this.RenderSpeed)
{
case 5: TimerGuide.Interval = 50; break;
case 10: TimerGuide.Interval = 40; break;
case 15: TimerGuide.Interval = 30; break;
case 20: TimerGuide.Interval = 20; break;
case 25: TimerGuide.Interval = 10; break;
}
}
private void PictureBox_Paint (object sender, System.Windows.Forms.PaintEventArgs e)
{
//
// '~~> Rest of the code remains same
//
//this.RenderGuidePoint.Offset(this.RenderSpeed, 0);
this.RenderGuidePoint.Offset(1, 0);
//
// '~~> Rest of the code remains same
//
}
HTH