首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Visual C# 2005 動畫效果實作(四):Timer 定時器驅動眨眼、彈球、閃爍文字完整程式碼

     編輯:關於C語言

Timer Tick 事件:核心動畫迴圈

利用 Timer 定期重繪圖形產生動畫效果,完整程式碼:


private void tmrAnimation_Tick(object sender, EventArgs e)
{
    // 眨眼效果
    if (optWink.Checked)
    {
        Graphics grfx = CreateGraphics();
        grfx.DrawImage(arrImages[intCurrentImage],
            (ClientSize.Width - arrImages[intCurrentImage].Width) / 2,
            (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,
            intBallPositionX - intBallBitmapWidth / 2,
            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 = grfx.MeasureString(strText, font);
        PointF ptfTextStart = new PointF(
            (ClientSize.Width - sizfText.Width) / 2f,
            (ClientSize.Height - sizfText.Height) / 2f);
        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 += intGradientStep;
        if (intCurrentGradientShift == 500) intGradientStep = -5;
        else if (intCurrentGradientShift == -50) intGradientStep = 5;
    }
}

三種效果透過 RadioButton 切換,各自調整 Timer.Interval 控制速度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved