2014-01-08 60 views
-1

在Form1我有一個定時器1 Tick事件:如何製作閃爍像素?

private void timer1_Tick(object sender, EventArgs e) 
     { 
      if (CloudEnteringAlert.cloudsdetected == true) 
      { 
       timer1.Enabled = true; 
      } 
      else 
      { 
       timer1.Enabled = false; 
      } 
     } 

在類CloudEnteringAlert頂部我所做的:

public static bool cloudsdetected; 

然後將其設置爲false爲默認:

static CloudEnteringAlert() 
     { 
      cloudsdetected = false; 
     } 

然後在一種方法中,我將其設置爲true或false:

if (clouds.Count == 0) 
      { 
       cloudsdetected = false; 
       clouds = null; 
      } 
      else 
      { 
       cloudsdetected = true; 
      } 

如果列表不爲空,那麼雲就是雲。 這意味着我想要paint事件中的像素閃爍。

在pictureBox1的Paint事件我有:

foreach (PointF pt in clouds) 
       { 
        e.FillEllipse(Brushes.Yellow, pt.X * (float)currentFactor, pt.Y * (float)currentFactor, 2f, 2f); 
       } 

現在,這只是顏色的像素爲黃色。 現在我想使用Timer1莫名其妙如果cloudsdetected = true;然後啓用計時器,並且每秒都會將繪畫事件中的像素顏色從黃色改變爲透明顏色或紅色並回到黃色,以便看起來像閃爍。

+0

使用動畫gif嗎? –

回答

0

您將需要在您的計時器中設置顏色值。去它的方法之一:

有云顏色數組:

// blinking colors: yellow, red, yellow, transparent, repeat... 
var cloudColors = new [] { Brushes.Yellow, Brushes.Red, Brushes.Yellow, Brushes.Transparent } 
// current color index 
var cloudColorIndex = 0; 

在定時器事件設置的顯色指數:

private void cloudTimer_Tick(object sender, EventArgs e) 
{ 
    cloudColorIndex = (cloudColorIndex + 1) % cloudColors.Length; 
} 

在您的油漆事件,你現在可以使用目前的顏色,而不是一個固定的:

foreach (PointF pt in clouds) 
{ 
    e.FillEllipse(cloudColors[cloudColorIndex], pt.X * (float)currentFactor, pt.Y * (float)currentFactor, 2f, 2f); 
}