用 Flash 实现物理课件的“积件”式开发
在我国,课件的开发速度远远跟不上教学的需求,原
因在于课件开发效率极低, 主要表现为重复开发, 没有积累。积件的重复利用特性可以降低我国课件开发总成本,是提高开发效率的有效手段。
笔者认为,如果能使得制作课件的时间缩小为半个小时至一小时(接近于 PPT课件制作),积件化课件制作将会得到普及,并成为主流。
一、物理积件的特点
如果把物理课件的组成模块看作一级积件的话,图表、信息、例题、资料、练习并非物理积件所独有,应属于通用积件,因此,实际意义上的积件主要是指物理实验部分。
物理是典型的实验科学,很多教师认为模拟实验现象不如让学生亲自动手做。这种观点有一定道理,但不应该就此抹煞实验模拟类积件,此类积件具有安全、可重复操作、演示效率高和可对比观察等优点。因此实验模拟积件与真实实验应共同存在,两者起到相辅相成的作用。
物理模拟现实比较复杂,要开发一个好的物理积件库,
必须要构建不可视对象的积件。例如力是不可视对象,它只有作用于物体才能够表现出来。
二、物理积件库的三层构想及开发实践
1.物理积件库的三层构想
按照笔者构想,每一个积件库可以分为三个层级。分别为素材层面的整合类积件库;具有属性方法对象层面的积件库;以侦听和注册等手段来组织,以“自动交互”为目的的积件库。每一层级都以上一层级为基础构建,逐步增加开发难度与功能。
第一层级很容易构建,绘制或者征集整套的物理仪器图库,如全套电学仪器图库、光学仪器图库、理学仪器图库,其中包括简单的动画即可。
第二层级较为复杂,它为所有仪器元件增加电阻、电功率、额定电压,为组件的运转制作动画(如电机转动动画、
灯点亮动画等);为各种仪器元件增加类似“通电(电压) ” 方法,如灯泡的通电方法需要接受一个电压参数,灯泡会根
据电压决定亮度。这些属性和方法不一定都用到,但是完成后,第三层级的积件就有了建立的基础。
第三层级在第二层级的基础上进行开发,两者的区别在于,如果使用第二层级的积件制作课件,需要由使用者进行
逻辑判断(如电路是否需要连通) ,使用第三层级进行制作,
系统会自动判断电路是否连通。
2.物理积件库的具体开发
使用 Flash 软件进行课件的积件式开发是当前的积件式开发的一个重要分支,它有望成为主流。
物理积件库可以分为四个库,按照开发规模大小依次为:力与运动、 电学、光学、机械波。光学部分内容少而且独立,本文篇幅所限,所以在此仅讨论电学、力与运动。
1)电学部分开发
第一层级积件库建设:只要整理一套风格统一的可视仪
器库便可形成(如下图) 。
第二层级积件库建设:要给各种仪器元件增加各种属性(如电阻,额定电压);此外,要根据不同仪器,增加不同“加压”连通函数。连通函数可以传递“电压”参数,如小
灯泡的连通是这样的,灯泡 .加压 (“电压数” )。一个滑动变阻器调节灯亮度的核心代码为:
灯泡 .omEnterFrame=function(){
if( 开关 .连通 ){
灯泡 .加压 (灯泡 .电阻 *( 电池 .电压 /( 电池 .电阻 +变压器 .
电阻 +灯泡 .电阻 )));
}
Else{
灯泡 .断开 ();
}
}
此代码的作用是根据各个仪器元件的属性决定灯泡亮度。电路之间的逻辑关系是由编程来体现,不是根据电路连接自动作出判断的。
第三层级积件库建设:它比第二层级的积件使用少了编程与逻辑过程,但这又对积件开发提出了更高的编程要求。鉴于实现此模式有几种不同的架构,笔者推荐以基于导线和触点的电路连接为架构。落实到技术上,即为每一个仪器元件增加触点,导线必须连接到触点才算连接完成,系统根据导线的连接方式计算电路的电压电流、最终决定电器以及整个电路的状态,此方案设计的好处是允许多触点仪器的存在(如滑动变阻器和许多测试仪器入电流表就有多个触点,另外它还具有仿真实验室的效果,甚至还可以使用简单元件来实现复杂仪器的组装) 。
2)力与运动学部分开发
力与运动学部分包括微观热学、电磁力学部分、功与机
械能部分、机械运动、碰撞等,它是物理学科最大的一部分内容。物理现象通常是通过物体运动表现的,这种运动又是不可视的,因此第一层级的力学部分积件库涉及不到力和运
动,通常仅仅绘制一些常见的物理仪器。第二层级就要构建
运动类, Flash 自带 Tween 类就能解决开发运动类所需的基
本功能,对于使用者来说,掌握运动类的方法和属性会有一
些难度,如下例的代码是控制一个小球跳动,直到能量损失
完停止。
#include "lmc_tween.as"
$tweenManager.broadcastEvents = true;
小球 .弹起= true;
小球 .高度= 200;
衰减系数= 0.2;
跳跃时间= 1;
小球 .onPress = function() {
小球 .tween("_y",小球 ._y+小球 .高度 , 跳跃时间 ,
"easeInQuad");
};
小球 .onTweenEnd = function() {
if ( 小球 .弹起 ) {
小球 .tween("_y",小球 ._y-小球 .高度 , 跳跃时间 ,
"easeOutQuad");
} else {
小球 .tween("_y",小球 ._y+小球 .高度 , 跳跃时间 ,
"easeInQuad");
小球 .高度 = 小球 .高度 *(1- 衰减系数 ); 跳跃时间 = 跳跃时间 *(1- 衰减系数 );
}
小球 .弹起= !小球 .弹起 ;
};
小球 .addListener( 小球 );
第三层级因为减少编程量, 使用的优势凸显。
笔者建议,开发者应多下工夫直接开发第三层级积件库。
其构想是:跳过运动类开发,直接开发力类,物体的运动完全由力控制,由力来决定物体的运动形态,以便减少运动类的开发工作量。以下代码是一个假想的复杂模拟实例:在一个悬挂在点电荷电场中的小球保持静止,细绳偏转一定角度。按下按钮,绳子断掉后,小球在重力和电荷力的合力下向电荷运动。可以随时按照相按钮拍下小球的位置。
重力 =New 力 (“重力” );
电场力 =New 力 (“电场力” ,电荷 );
弹力 =New 力 (“弹力” ,细绳 );
小球相机 = New 相机 (“小球” );
弹力 .添加 (小球 );
重力 .添加 (小球 );
电磁力 .添加 (小球 );
按钮 .onPress=function(){
弹力 .取消 (小球 );
相机 .照相 ();// 或者在这里启动一下相机:
}
照相按钮 .onPress=function(){
相机 .照相 ();
}
弹力根据小球的质量,带电量自动计算受到力的大小,决定细绳偏转角度。绳子断裂后,系统自动根据受力决定小球的运动轨迹(并不一定是直线) 。
三、怎样组织人员建设物理积件库
物理积件库开发复杂度高,开发人员需要既有教学经验,又有编程能力。然而这样的人才少之又少,所以人员的组织有两个方向:一是挑选程序员,配以教师交流。二是挑选老
师,培训编程。前者的优势在于产品开发快, 技术比较专业;可一旦失去资金支持,资源库的更新和维护就跟不上。后者
问题是开发周期长,前期不够规范;优势在开发后期,经过培训的这些老师自己可以更新和维护。
最理想的人员组织形式为前期专业人员开发,同期教师培训。对不以营利为最终目的的开源项目来说,培训应该和
开发同步进行。
如采取结对编程进行开发,再同步予以培训,
虽然进度会慢一些,但是能够培养出技术骨干,方便后期推
广和维护。
(作者单位:山东天鸿书业多媒体开发中心)
查看全文
false