ハロウィーンディスプレイのために、C#/ Windowsフォームのクイックアニメーションをノックアウトする必要があります。単色の背景上で動き回る2D図形のみ。これは単なる一回限りのプロジェクトであるため、私はreallyの新しいセット全体をインストールして学習したくないこのためのツール。 (DirectX開発キット、Silverlight、Flashなど。)また、これを複数のコンピューターにインストールする必要があるため、基本的な.Netフレームワーク(2.0)以外のものは苦痛になります。
ツールについては、25年の開発経験を持つVS2k8、手押し車、ホロコーストマント、そしてこれをノックアウトするのに約2日かかりました。 Atari 130XEでアセンブラーを使用して以来、アニメーションを実行していません(ページフリッピングとプレーヤー/ミサイルグラフィックスにご注意ください!)
助言?知りたいことがいくつかあります。
ありがとう。
死後編集... "コーディングの数日後"
さて、プロジェクトは完了です。以下のリンクは便利でしたが、そのうちのいくつかは404でした(SOを指定すると、複数の返信に「正しい」マークを付けられるようになります)。 、およびフォームに直接描画しようとしたときの永続的なバグ。
フォームにすべての「ダブルバッファリング」オプションを設定しても、修正が必要なちらつきが残ります。 (そして、「コントロールに設定する」と「フォームに設定する」という矛盾するドキュメントを見つけました。コントロールには.SetStyle()メソッドがありません。)私はそれらなしではテストしていません。何かをする(this
はフォームです):
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
したがって、コードの主役は次のようになります(pf
はパネルコントロールです):
void PaintPlayField()
{
Bitmap bufl = new Bitmap(pf.Width, pf.Height);
using (Graphics g = Graphics.FromImage(bufl))
{
g.FillRectangle(Brushes.Black, new Rectangle(0, 0, pf.Width, pf.Height));
DrawItems(g);
DrawMoreItems(g);
pf.CreateGraphics().DrawImageUnscaled(bufl, 0, 0);
}
}
そして、タイマーループの内部からPaintPlayFieldを呼び出しました。ちらつきはありません。
希望するフレームレートでタイマーをオフにします。タイマーを起動するたびに、達成するアニメーションモーションごとに画面(モデル)の形状の内部表現をいじり、Invalidate(true)
を呼び出します。 OnPaint内では、画面上にモデルを描くだけです。
そうそう、おそらくダブルバッファリングをオンにする必要があります(これは自動ページフリッピングに似ています)。