2017-10-27 13 views
1

私はPacmanがマウスポインタを追いかける、とても簡単なゲームを作った。 しかし、場所が変わるたびに、画像が表示されているpacMan - Panelがちらつきます。場所を変更するときのWinFormのちらつき制御

private void Move_Tick(object sender, EventArgs e) 
{ 
    int newPositionX = pacMan.Location.X; 
    int newPositionY = pacMan.Location.Y; 

    lblMousX.Text = PointToClient(Cursor.Position).X.ToString(); 
    lblMouseY.Text = PointToClient(Cursor.Position).Y.ToString(); 
    lblThingX.Text = pacMan.Location.X.ToString(); 
    lblThingY.Text = pacMan.Location.Y.ToString(); 

    if (pacMan.Location.X + 15 < PointToClient(Cursor.Position).X) 
    { 
     newPositionX = pacMan.Location.X + 1; 
     if (pacMan.BackgroundImage != Properties.Resources.Pac_Rechts) 
      pacMan.BackgroundImage = Properties.Resources.Pac_Rechts; 
    } 
    if (pacMan.Location.X + 15 > PointToClient(Cursor.Position).X) 
    { 
     newPositionX = pacMan.Location.X - 1; 
     if (pacMan.BackgroundImage != Properties.Resources.Pac_Links) 
      pacMan.BackgroundImage = Properties.Resources.Pac_Links; 
    } 
    if (pacMan.Location.Y + 15 < PointToClient(Cursor.Position).Y) 
    { 
     newPositionY = pacMan.Location.Y + 1; 
     if (pacMan.BackgroundImage != Properties.Resources.Pac_Unten) 
      pacMan.BackgroundImage = Properties.Resources.Pac_Unten; 
    } 
    if (pacMan.Location.Y + 15 > PointToClient(Cursor.Position).Y) 
    { 
     newPositionY = pacMan.Location.Y - 1; 
     if (pacMan.BackgroundImage != Properties.Resources.Pac_Oben) 
      pacMan.BackgroundImage = Properties.Resources.Pac_Oben; 
    } 

    pacMan.Location = new Point(newPositionX, newPositionY); 
} 

すでに「DoubleBuffered」をtrueに設定していますが、何も変更されませんでした。

どうすればそのフリッカーを取り除くことができますか?

+0

同上問題はより多くのあなたのドロー・ルーチンであると想像。 – BugFinder

+0

もう少し詳しくお聞かせください。 – Julian

答えて

0

私はちょうどあなたがピクチャボックスにパネルを変更する必要が...

を問題を得ました。

0

パネルに子を作成し、コンストラクタにこのコードを追加:

this.SetStyle(
      System.Windows.Forms.ControlStyles.UserPaint | 
      System.Windows.Forms.ControlStyles.AllPaintingInWmPaint | 
      System.Windows.Forms.ControlStyles.OptimizedDoubleBuffer, 
      true); 

はすでにこの問題を持っていた...

関連する問題