1

ActiveDocument.Characters にループがあります。

ドキュメント領域へのデバイス コンテキスト ハンドルを取得しました。オーバーレイを表示して、テキストを左から右に 1 行ずつスムーズに強調表示したいと考えています。

目的は、アプリケーションが特定の速度で読むように誘導しているかのように、スムーズなアニメーションを実現することです。

もちろん、ループ自体はまったく滑らかではありません。アルゴリズムの提案。

4

1 に答える 1

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

于 2012-04-21T21:39:51.020 に答える