0

私はc#に非常に慣れていないので、簡単な質問があります。黒い背景に白い粒子(長方形)を描画し、画面の1つから別の画面に水平に移動することになっています。やりましたが、問題は瞬きが多すぎることです(つまり、速度が速くても滑らかではなく、各動きと別の動きの間の黒い背景が簡単にわかります)

t.Interval = 1000 / speed;
t.Tick += new EventHandler(t_Tick);
t.Start();

....

void t_Tick(object sender, EventArgs e)
        {
            //g.Clear(Color.Black);
            g.DrawRectangle(new Pen(Brushes.Black, 20), r);      //draw a black rectangle in the old position...20 is the thickness of the pen
            r.X += move_x;
            g.DrawRectangle(new Pen(Brushes.White, 20), r);      //draw a white rectangle in the new position...20 is the thickness of the pen
            if (r.X >= 1700)       ///this means it reached the end of the screen
                t.Stop();
        }

g.Clear を使用してグラフィックをクリアしましたが、これも機能しなかったため、新しい位置に移動する前に古い位置に黒い四角形を描きました。

この点滅を削除する方法、または別の方法で行う方法はありますか?

4

1 に答える 1

0

これを試してみてください...パネル(panel1)をフォームに追加します:

public partial class Form1 : Form
{

    private Rectangle r;
    private const int rSize = 50;
    private const int move_x = 10;
    private System.Windows.Forms.Timer tmr;

    public Form1()
    {
        InitializeComponent();

        panel1.BackColor = Color.Black;
        r = new Rectangle(0, panel1.Height / 2 - rSize / 2, rSize, rSize);

        tmr = new System.Windows.Forms.Timer();
        tmr.Interval = 50;
        tmr.Tick += new EventHandler(tmr_Tick);
        tmr.Start();

        panel1.Paint += new PaintEventHandler(panel1_Paint);
    }

    void tmr_Tick(object sender, EventArgs e)
    {
        r.X += move_x;
        panel1.Refresh();
        if (r.X > panel1.Width)
        {
            tmr.Stop();
            MessageBox.Show("Done");
        }
    }

    void panel1_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.DrawRectangle(Pens.White, r);
    }

}
于 2013-05-10T15:22:17.513 に答える