0

イベントで一緒e.Graphics.DrawImageに絵を描いています。フォームを更新するためForm_Paint()にを使用します。Timer問題は、アニメーションが点滅することです。更新に時間がかかりすぎているようですePictureBoxフォーム内に2つあります。

アイデア?

アップデート:

    public Bitmap Paint(int state, Graphics g)
    {
        this.state = state;

        Bitmap temp;
        Graphics tempGraphics;
        temp = new Bitmap(45, 47, g);
        tempGraphics = Graphics.FromImage(temp);

        switch (state)
        {
            case 0:
                tempGraphics.DrawImageUnscaled(img, x, y);
                break;

            case 1:
                tempGraphics.DrawImageUnscaled(img, x, y - 42);
                break;
        }
    }

これにより、スプライトをフォームに追加する前に準備されます。

4

3 に答える 3

1

これが一般的に管理される方法は、メモリ内のビットマップに更新を描画することです。次に、ビットマップを画面に描画します。処理は遅くなりますが (やるべきことが増えるため)、ちらつきがないため速く見えます。

ただし、実際には多くのコントロールが自動的にこれを行います。ダブルバッファリング技術を調べてください。

于 2012-11-30T23:49:01.347 に答える
0

ほとんどの場合、スタイルが適切に設定されていないことが原因であり、その結果、背景が最初に(通常は白)描画され、次に画像が描画されます。

また、単純に描画するだけでは十分でない場合は、ダブルバッファリングを検索/読み取ります。

于 2012-11-30T23:49:09.147 に答える
0

フォーム自体でアニメーションを実行しないようにすることで、問題を解決しました。コントロールをフォームに追加してから親をアニメーション化すると、UI スレッドが過剰になります。最良の解決策は、すべてのアニメーションをピクチャ ボックスに保持することでした。

したがって、 で直接アニメーション化するか、g.DrawImage()を使用することに固執しPictureBoxます。

于 2012-12-04T00:15:42.900 に答える