65.9K
CodeProject 正在变化。 阅读更多。
Home

带动画矩阵的复活节彩蛋惊喜

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.56/5 (9投票s)

2007年3月28日

viewsIcon

29024

downloadIcon

425

带动画矩阵的复活节彩蛋惊喜

下载 LTAniMatrix_ThreadSafe.zip - 1,901.5 KB

Screenshot - LTAniMatrix.jpg

Screenshot - GoogleAtWork.jpg

引言

标题已经说明了一切:一个彩蛋惊喜的想法。

背景

你看过《黑客帝国》吗?非常好的科幻电影。

使用代码


public partial class CLTAniMatrix : Panel
{
..
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);

            if (mbFreeze)
                return;

            Graphics g = e.Graphics;           

            if (mbStartOver == true)
            {
                mbStartOver = false;

                clockingBgkWorker.CancelAsync();                
                
                
                if (mbClearBgk)
                    ClearPanel(g);
                else
                    g.DrawImage(mBkImg, this.ClientRectangle);

                mStartOverSignal.Set();

                if (mbShowDebug)
                {
                    DrawDebugInfo(g);
                }

                return;
            }

            if (mbClearBgk)
                ClearPanel(g);
            else
                g.DrawImage(mBkImg, this.ClientRectangle);

            DropMatrixChars(g);
            DropMatrixClearChars(g);

            DrawBouncingLogo(g);

            if (mbShowDebug)
            {
                DrawDebugInfo(g);
            }
        }
 
        private void clockingBgkWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            if (clockingBgkWorker.CancellationPending)
                return;

            DoPlaySound();
            
            bool waitresult = false;

            while (clockingBgkWorker.CancellationPending == false)
            {                
                clockingBgkWorker.ReportProgress(99);

                Thread.Sleep(10);

                waitresult = mStartOverSignal.WaitOne(mPaintInterval, true);
                if (waitresult == true)
                    break;                    
            }
        }

        private void clockingBgkWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            this.Invalidate(false);
        }       

        private void clockingBgkWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            mSoundPlayer.Stop();

            InitMatrixChars();
            mMaxCharsToClear.Clear();

            if (mbFreeze)
            {
                mbStartOver = true;
                return;
            }
                       
            mbStartOver = false;
            WorkerRun();
        } 
... 

} 

一个扩展 Panel 的组件。只需将其拖放到窗体上即可。当不再需要时,将矩阵可见性设置为 false。

关注点

复活节快到了,给你的团队带来一些欢笑,让一个动画矩阵从无处出现。

历史

+ 重绘触发现在是线程安全的。
© . All rights reserved.