科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道利用Visual C# 2005制作简单动画效果之三

利用Visual C# 2005制作简单动画效果之三

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

最后,利用定时器将图形连续重绘于窗体上,便产生了动画效果。程序代码撰写于定时器的 Tick 事件处理例程中,如下所示

作者:中国IT实验室 来源:中国IT实验室 2007年9月11日

关键字: 利用 编程

  • 评论
  • 分享微博
  • 分享邮件
  

  最后,利用定时器将图形连续重绘于窗体上,便产生了动画效果。程序代码撰写于定时器的 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;
  }
 }
}

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章