Head First C# 中文版 第13章 控件和图形 page611

本文介绍如何通过双缓冲技术优化窗体动画显示效果。主要内容包括:调整窗体构造方法,去除背景图像设置;移除窗体控件,启用双缓冲;实现Paint事件处理方法以绘制蜂巢和田园场景;重构渲染器类,改进图像加载和绘制过程。

 

③为双缓冲的动画设置好蜂巢和田园窗体


移除窗体构造方法中设置背景图像的代码。移除所有窗体上的控件并把窗体的DoubleBuffered 属性设置为 true 。给两个窗体添加 Paint 事件处理方法。下面是蜂巢窗体的 Paint 事件的处理方法 -- 田园窗体的差不多,只是它调用 PaintField ()方法而已:


 

④两个窗体都需要一个公有的renderer 属性:


移除所有的对于渲染器的Reset ()方法的调用,把所有的 new Renderer ()语句替换为对下面的 CreateRenderer ()方法的调用:


 

⑤大修渲染器


如下做:


* 移除两个字典。移除Render ()方法,还有 DrawBees (), DrawFlowers ()方法。


* 添加一些叫做HiveInside HiveOutside Flower Bitmap 类型的字段,它们用于存储图像。然后创建两个 Bitmap[] 数组,分别叫做 BeeAnimationLarge BeeAnimationSmall 。它们两个分别存储四张蜜蜂的图片 -- 大的是 40x40 ,小的是 20x20 。创建一个叫做 InitializeImages ()的方法来缩放资源并把它们存储在这些字段中,并从 Renderer 的构造方法中调用它。


* 添加PaintHive ()方法,它接受一个 Graphics 作为参数,它用来绘制蜂巢。首先绘制蓝色的矩形,然后使用

DrawImageUnscaled ()来绘制蜂巢内部的图片,然后使用 DrawImageUnscaled ()来绘制每一只处于蜂巢内部的蜜蜂。


* 最后,添加PaintField ()方法。它在窗体上半部分绘制天蓝色的矩形,下半部分绘制绿色的矩形。窗体的两个属性 ClientSize ClientRectangle 可以告诉你绘制区域的大小。你可以用这两个属性找到窗体的一半的位置。用 FillEllipse ()来绘制一个黄色的太阳,用 DrawLine ()绘制用于悬挂蜂巢的树枝。用 DrawImageUnscaled ()来绘制蜂巢的外部形象。然后绘制花朵。最后绘制蜜蜂,这样蜜蜂就可以处于最前端。


* 绘制蜜蜂的时候,要记得AnimateBees ()方法设置了 Cell 字段。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值