一、Visual C++项目
仅填写画面绘制函数DrawScence及CScence构造函数。不能更改模板项目内其他代码,不能更改源码项目设置。避免接口变动影响到已编译过的动画文件。
可以根据动画运算需要,用面向对象(OO)方法,封装动画元素为类,供绘图时使用。即可以在项目中增加类(Class)定义。
可以将复杂运算,分解为子函数等。即可以在CScence类中增加成员变量及成员函数或定义全局变量即全局函数。
Visual C++开发,最好安装离线的MSDN手册(帮助文档),便于随时查阅语法、函数、开发接口说明。参见:【PC Animation 开发手册 附录1 VS2015安装 】。
二、使用浮点数
C++是强格式语言,对变量类型要求很严格。绘图接口采用了浮点数(float)作为参数类型。而现在源文件中书写的数字,默认为双精度型(double),故书写常数值时,需要写成“0.0f, 23.12f”样式。
数学函数(如sin,cos)默认以双精度型数值为变量,故需改用函数的浮点数版本(如sinf,cosf)。
三、帧画面绘制约束
DrawScence(IDrawTools * pDraw,int nScence)是动画绘制函数。播放状态下,播放器1秒调用DrawScence 20次,其间,nScence(帧数值)递增。用户可通过播放器上进度条、按热键(前、后方向键)的方式跳转帧数值,实现进度控制。
基于以上架构,在DrawScence中进行帧画面绘制时,可准从以下两种规范之一:
1) 建议方式: 各帧独立绘制
DrawScence中的绘图代码,仅依赖nScence(帧数)及当前参数值绘制完整画面,以保证用户可通过进度条,和快捷键,跳转到任意帧,以保证变更参数时,能立即反应。
DrawScence内代码执行时间不应大于50ms。若执行时间过长,将导致定时器消息拥堵,播放器为了保证对其他命令的响应,会自动跳过某些帧的绘制。跳帧过多,将影响动画的流畅性。
参见范例“§14-3 简谐振动与旋转矢量”
2) 备用方式:由前帧数据绘制当前帧
对某些动画设计(如仿真计算、需数值迭代求解),计算量大,可能无法在帧间隔(约50ms)内完成单帧画面的即时计算。则可使用以下替代方案。
绘制新一帧时,沿用前帧的计算结果。此时,需要注意:
a) 帧代码应避免使用帧计数nScence。
进行播放控制(进度条拖放、快捷键翻页等)时,帧计数会跳转数值。
例如:不能用帧计数做缓存数组的索引。
b) 不支持进度控制。
c)播放期间,若用户编辑参数,可能会使计算结果及绘制画面出错。
参见范例“§7-3 气体分子速率分布 目录”