Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
ちらつき-2
「ちらつき」を無くす-2


Sprite を切り替える の演習「タイマ設定でアニメーション」のプログラムが完成したでしょうか。
実行すれば解るのですが、時々「画面がチラツク」でしょう。 (^_^;)
これではせっかくのアニメーションも台無しです。
「ちらつき」を無くす-1 では「OnPaintBackground() をオーバーライド」したのですが、
背景描画のメソッドをパスする方法もあります。
前田稔(Maeda Minoru)の超初心者のプログラム入門


プロジェクトの設定
- 空のプロジェクトを作成して、ソースプログラムをプロジェクトに追加して下さい。
今回のプログラムは、以下の説明を元に各自で作成して下さい。
- 大きな画像から Sprite を切り出して、タイマの設定で Sprite を切り替えます。
このようなプログラムでは MyHandler() で毎回ファイルからイメージをロードするのでは如何にも無駄です。 (^_^;)
そこで最初に一度だけ画像をロードして、描画の準備を整えます。
前回は MyForm() の Constructor で画像をロードしたのですが、スマートな方法とは言えませんでした。
今回は Main() メソッドの最初で画像をロードして下さい。
bmp の宣言に注目して下さい。
Main() とは Class が異なるので public で宣言します。
また Main() が static なので bmp も static で宣言して下さい。
public static Bitmap bmp;
public static void Main()
{
// Load Image
try
{
MyForm.bmp= new Bitmap("c:\\data\\test\\girl.gif");
}
catch
{ MessageBox.Show("イメージが取得できません", "Error");
return;
}
|
- Sprite を描画するメソッドは Frame Class の OnPaint() をオーバーライドします。
今回は画像のロードに失敗した判定は不要です。
- 肝心の「チラツキ」を無くす方法です。
SetStyle() で Opaque を true に設定すると OnPaintBackground() が呼び出され無くなります。
// MyForm
Name = "MyForm";
SetStyle(ControlStyles.Opaque, true);
|

【演習】
- Sprite を切り替える では画像のロードに失敗したときに、一瞬ウインドウが表示されたのですが、
表示されなくなったことを確認して下さい。
ソースコードもスマートになったでしょう。 <(`^´)>
- このままではウインドウの背景(描画されない部分)が変ですね。 (;_;)
そこで最初の一度だけウインドウをクリアして下さい。
ウインドウをクリアするソースコードです。
|
g.Clear(Color.LightGray);
|
- また、最初に一度しか画面をクリアしないのでは、透明色の部分が重ね書きされて画像が崩れます。
透明色を使ったアニメーションを行うときは、次の方法を用います。
- 毎回、背景画像を描画した上からアニメーション画像を描画する。
- より抜本的な方法は、ダブルバッファを使うことです。
ダブルバッファを使う方法は、この後で説明します。

超初心者のプログラム入門(C# Frame Work)

※・