一、动画属性设置
在CScence的构造函数中定义动画属性
例如:
CScenes::CScenes(void)
{
//画面坐标尺寸,单位是“像素点”
m_sizeMovie=CSize(800,600);
//总长度(帧数)
m_nTotalFrame=200;
//原点位置(按数学坐标,右上为正)
m_ptOrigin.x=400;
m_ptOrigin.y=300;
//画面背景色
m_clrBk=RGB(255,255,255);
}
二、动画交互参数设置
在CScence类中添加成员变量
在CScence的构造函数中向播放器声明需要链接那些变量。播放器将依据声明过的变量数目、属性,建立相应的按钮、输入框等。
在CScence::DrawScence中,使用变量,依据变量的值,即使计算和绘制。
举例:需要用户输入“起始角度”
在CScence中增加m_fStartAngle变量
class CScenes:public CScenesBase
{
…
float m_fStartAngle;
};
在CScence构造函数中向播放器开放该变量
CScenes::CScenes(void)
{
…
//定义参数: 变量,变量文字名称,默认值,下限值,上限值
DefineParam(&m_fStartAngle,_T("初始夹角(π)"),0.15f,0.0f,2.0f);
}
在CScence::DrawScence中使用变量值
播放动画时,播放器会为m_ fStartAngle建立输入框,默认输入了0.15,用户可更改输入。在绘制动画时,要依据变量的数值,即时计算、绘制。
void CScenes::DrawScence(IDrawTools * pDraw,int nScence)
{
…
float newAngle=m_ fStartAngle+m_fWomega*(float)nScence;
//绘制以newAngle为夹角的箭头….
}
三、动画的形成
要形成动画,需要在DrawScence函数中,依据传入的nScence(帧数),自行计算、绘制相应画面。
可以把nScence理解为时间值time,时间不同,所绘制的元素的位置不同。播放器以一定的周期调用DrawScence,而DrawScence中的代码按传输的time,重新绘制整个场景。
DrawScence中完整描述各时刻画面,形成动画各帧。各帧画面在代码实现上,应尽量独立,避免前后依赖。(即仅有nScence和各交互参数,完整确定、绘制该帧画面,避免引用其他数据)。详见“4. 动画代码规范”。
四、绘图接口
PC Animation 播放器提供了一个简洁的二维、三维图形绘制引擎。动画文件使用该引擎实现场景绘制。动画的实际绘制工作由绘制引擎实现,动画文件中关注的主要是场景、动画的组织。
绘图引擎以课本线条插图为蓝本,只需要提供常见黑板手绘元素,不需要引入绘图能力更强的软件功能(如三维场景渲染)。例如:三维绘图,仅需要表达基本的三维透视关系,如下图所示:
图1 绘图示例
绘制接口提供的绘图功能包括以下几个方面:
1) 当前绘图工具的选择。包括画笔、画刷、字体等等。
2) 二维坐标系变换。
3) 二维坐标系下基本图形的绘制。
4) 三维坐标系变换
5) 三维基本图像绘制
6) 三维到二维之间的信息转换
7) 位图操作
8) 表达式绘制
9) 扩展二维、三维图形的绘制
矢量箭头、含标识的箭头、斜线标识的线段等等教学课程中常用的图形符号。
图2 物理元素示例
绘图接口详情,请参见【PC Animation 绘图引擎】
绘图接口(绘图引擎)的定义,可查阅include目录下的Interface.h
五、位图的绘制
可以在场景中使用小尺寸位图。
需要将位图(.bmp)作为源码项目的资源。
在CScence中定义CBitmap成员变量
在CScence构造函数中加载位图资源
在CScence::DrawScece中使用绘制位图