程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 利用Visual C# 2005制作簡單動畫效果(4)

利用Visual C# 2005制作簡單動畫效果(4)

編輯:關於C語言

最後,利用定時器將圖形連續重繪於窗體上,便產生了動畫效果。程序代碼撰寫於定時器的 Tick 事件處理例程中,如下所示:

private void tmrAnimation_Tick(object sender, EventArgs e)
{
 // 眨眼效果。
 if(optWink.Checked)
 {
  Graphics grfx = CreateGraphics();
  // 將數組中之圖形繪制在畫面上。
  grfx.DrawImage(arrImages[intCurrentImage],(int)(
(ClIEntSize.Width - arrImages[intCurrentImage].Width) / 2),
(int)((ClIEntSize.Height - arrImages[intCurrentImage].Height) / 2),
arrImages[intCurrentImage].Width,arrImages[intCurrentImage].Height);
  intCurrentImage += j;
  if(intCurrentImage == 3)
  {
   j = -1;
  }
  else if(intCurrentImage == 0)
  {
   j = 1;
  }
 }
 else if(optBall.Checked) // 彈跳的球。
 {
  Graphics grfx = CreateGraphics();
  // 將球繪制在畫面上。
  grfx.DrawImage(bitmap,(int)(intBallPositionX - intBallBitmapWidth / 2),
(int)(intBallPositionY - intBallBitmapHeight / 2),
intBallBitmapWidth, intBallBitmapHeight);
  // 移動球的位置。
  intBallPositionX += intBallMoveX;
  intBallPositionY += intBallMoveY;
  // 球碰到左右邊界。
  if(intBallPositionX + intBallRadiusX >= ClIEntSize.Width || intBallPositionX - intBallRadiusX <= 0)
  {
   intBallMoveX = -intBallMoveX;
   SystemSounds.Beep.Play();
  }
  // 球碰到上下邊界。
  if(intBallPositionY + intBallRadiusY >= ClIEntSize.Height || intBallPositionY - intBallRadiusY <= 75)
  {
   intBallMoveY = -intBallMoveY;
   SystemSounds.Beep.Play();
  }
 }
 else if (optText.Checked) // 閃動文字。
 {
  Graphics grfx = CreateGraphics();
  // 設定文字的字型與大小。
  Font font = new Font("Microsoft Sans Serif", 48, FontStyle.Bold, GraphicsUnit.Point);
  // 設定要顯示的文字。
  string strText = "章立民研究室";
  SizeF sizfText = new SizeF(grfx.MeasureString(strText, font));
  // X坐標與Y坐標的配對。
  PointF ptfTextStart = new PointF((float)(ClIEntSize.Width - sizfText.Width) / 2,
(float)(ClIEntSize.Height - sizfText.Height) / 2);
  PointF ptfGradIEntStart = new PointF(0, 0);
  PointF ptfGradientEnd = new PointF(intCurrentGradIEntShift, 200);
  // 設定筆刷。
  LinearGradientBrush grBrush = new LinearGradientBrush(ptfGradientStart, ptfGradIEntEnd, Color.Blue, BackColor);
  // 將文字繪制在畫面上。
  grfx.DrawString(strText, font, grBrush, ptfTextStart);
  // 以不同的坐標繪制文字,造成閃動效果。
  intCurrentGradIEntShift += intGradiantStep;
  if (intCurrentGradIEntShift == 500)
  {
   intGradiantStep = -5;
  }
  else if (intCurrentGradIEntShift == -50)
  {
   intGradiantStep = 5;
  }
 }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved