当前位置:首页 > 述职报告 > 基于FLASH技术的虚拟仿真实验开发_虚拟仿真实验
 

基于FLASH技术的虚拟仿真实验开发_虚拟仿真实验

发布时间:2019-01-10 04:13:38 影响了:

  摘要:虚拟仿真实验的应用可以提高学生对实验的熟悉程度,弥补实际实验室硬件条件的局限,提高教学效果,促进教学改革。文章以物理天平的模拟调节实验为例,介绍了面向对象编程的特点,以及如何利用FLASH进行面向对象的虚拟仿真实验开发。
  关键词:FLASH;面向对象编程;虚拟仿真实验;物理天平
  中图分类号:TP391文献标识码:A文章编号:1009-3044(2007)17-31438-03
  Development of Virtual Simulate Experiment Based on Flash
  WANG Lin,JI Yi
  (Southeast University,Nanjing 211189,China)
  Abstract:The application of virtual simulate experiment can help students familiarize the experiment, offset the deficiency of the hardware in the laboratory, improve the effect of teaching and study, and accelerate the innovation of teaching. By the example of simulate measure of physical balance, the article introduce the characteristic of object-oriented programming and the object-oriented development of virtual simulate experiment based on flash.
  Key words:Flash;Object-oriented Programming;Virtual Simulate Experiment;Physical Balance
  
  1 引言
  
  虚拟仿真实验利用计算机网络技术和多媒体技术对实验项目进行仿真,仿真实验系统应能提供简单通用的交互界面,能准确地计算并模拟实际实验状态和仪器操作状态,能正确地分析判断用户的操作流程,对用户不当操作进行屏蔽或提示,并能支持在网络上的应用。基于以上一些特点,使得仿真实验的开发相对比较困难,制作周期长。笔者多年来一直致力于仿真实验方面的工作,尝试过数种开发软件,总结发现FLASH开发出的软件文件小、画面形象、交互性强、支持流媒体,同时开发方法也较容易掌握。
  就目前市场上而言,大多数基于FLASH的教学软件还仅仅停留在利用FLASH强大的动画功能,制作形象生动的演示型课件。其实到了FLASH MX 2004以后,FLASH已显示了强大的编程功能,完全能够轻松开发出交互性极强的虚拟仿真软件。本文将以物理天平的模拟调节为例,介绍如何利用FLASH进行面向对象虚拟仿真实验的开发。
  
  2 面向对象的FLASH编程
  
  2.1 面向对象编程的特点
  从FLASH MX 2004开始出现了ActionScript2.0,这是一个完全基于面向对象编程(Object-Oriented Programming)的编程语言。面向对象编程中最重要的概念是“对象”,它是一个自我包含的个体,可以说现实世界中任何东西其实都是一个对象。每个对象都会有一些状态或信息,也就是对象中的变量,在面向对象编程中就叫做“属性”,而“方法”就是用来读取或修改“属性”的。每个对象只可以管理自己的属性,而不应该让外界直接读取或修改对象的属性,这就是“封装”。外界可以调用对象的方法来调整对象的数据。利用封装的好处就是使编程寻找错误更加容易,更可以避免因为数据改变而影响其他程序。
  外界改变对象的属性,可以通过对象自己提供的方法:公共方法和隐式获取/设置方法。如图1所示。
  两者都是属性对象里的方法,区别是,前者除了可以用来改变对象的属性外,更可以提供一些程序给外界调用;后者则只提供途径给外界改变对象的属性。一般我们在编程中,应该集中用隐式获取/设置方法负责属性的改变,而公共方法负责提供一些程序给外界调用。
  前面介绍的是面向对象编程特点中的“封装性”,此外还有一些特点,如“重用性”、“继承性”和“多态性”,这些特性使得面向对象编程较之于过程性编程有开发流程清晰、编程容易、维护容易、程序健壮性强等特点。
  图1 外界如何改变对象的属性
  2.2 对象间的通信
  通信在面向对象的编程中很重要,对象彼此要通知对方何时开始工作,何时工作已经完成;当对象间的数据不能实时传递,有异步要求时需要通信;当一个对象要通知多个对象时需要通信。
  对象分为两种身份,一种是通知者,称为主题(Subject);另一种是被通知者,称为观察者(Object)。要想成为主题的观察者,是通过向主题注册。当主题发出广播时,所有观察者就会收到通知。主题发出广播就是一个消息,观察者根据收到的消息名称执行特定的程序。
  在Flash中消息由作为主题的MovieClip发出,并可以由TimeLine获得;接收的MovieClip注册为观察者后对时间轴进行侦听,一旦主题发出广播,观察者就可以捕获到。如图2所示。
  图2 带有消息的对象
  FLASH MX 2004中内置了一个EventDispatcher类,它方便的实现了Flash中对象间的通信问题。
  EventDispatcher 类的5个重要方法;
  initialize() 当对象要利用EventDispatcher类加入事件广播功能时,就必须先调用EventDispatcher. Initialize(对象)进行初始化,给对象加入以下4个方法;
  addEventListener() 给外界对象注册为观众者;
  removeEventListener() 给外界对象取消注册为观众者;
  dispatchEvent() 给主题发出广播;
  dispatchQueue() 真正执行广播的程序,利用for循环遍历名单,调用观众者/观众者的事件同名方法。
  有了以上的一些基本概念,下面来介绍如何利用FLASH面向对象编程方法开发具有模拟调节、称量功能的物理天平。
  
  3 物理天平模拟调节实验的开发
  
  3.1 天平各个部件的分解
  根据面向对象编程的特点,第一步就是将目标进行分解,将其不同的部件都看成一个对象,设计成一个单独的类。就物理天平而言,主要包括制动旋钮(RotateBtn)、横梁(hBannerMC)、刀托(vBannerMC)、调平螺丝(BoltBtn)、平衡螺母(BoltTopBtn)、游码(MoveCodeMC)、左右托盘(TrayMC)、待测物(ObjectMC)、砝码(CodeMC)。
  在ActionScript里面定义类的方式与JAVE等非常类似,以横梁为例,其基本结构如下:
  class hBannerMC {
  //属性
  private var _isMoveUp:Boolean;
  public var ... ...//构造函数
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文   function hBannerMC (){
  ... ...}//隐式获取/设置方法
  Public function get isMoveUp ():Boolean {
  return _isMoveUp;}
  public function set isMoveUp(inValue:Boolean) {
  _isMoveUp = inValue;}//公共方法
  public function RotateDirection (){
  ... ...} //私有方法
  private function RotateAction (){
  ... ...} }
  可以利用以上的结构分别定义天平的各个部件。
  3.2 主程序的开发
  物理天平的调节可以分为三大步,调平――空载调零――称量物体,实验中三个步骤的顺序不能颠倒,并且是在前一步完成后才可进入下一步。当然在开发过程中,可以先抓主要矛盾,攻破重点,其他的步骤再一步步补充。就天平的模拟调节来说,物体的称量这部分最复杂,涉及部件也最多,下面主要介绍一下这部分的制作。
  物体的称量中涉及到的部件有:制动旋钮、横梁、刀托、左右托盘、待测物、砝码和游码,其中制动旋钮起着一个重要作用。旋转制动旋钮,横梁、刀托升起,托盘、物、砝码同时抬起;再次旋转制动旋钮,横梁放下,其他物体也一起放下。横梁放下时,可将待测物置于左托盘,增减砝码于右托盘,并可调节游码;横梁升起时,判断天平是否平衡,同时不可移动待测物、砝码和游码。
  针对这样一个规律,在制动旋钮这个类中需要一个属性,给出状态是升起还是放下,将其定义为一个Boolean量:isUp。横梁、托盘、待测物、砝码等物体通过隐式获取方法得到该属性的值,决定自己运动状况。下面的程序完成了制动旋钮旋转横梁抬起,再次旋转横梁放下这样一个过程,通过这段程序也可以看出制动旋钮和横梁间是如何通信的。
  时间轴上的主程序balanceMC.as:
  //定义一个侦听器对象HBannerListener
  var HBannerListener:Object = new Object();
  //为onRotation事件定义一个回调函数
  HBannerListener.onRotation = function() {
  hbanner_mc.RotateAction();};
  //为onUpJudge事件定义一个回调函数
  HBannerListener.onUpJudge = function(evt) {
  hbanner_mc.isMoveUp=rotatebtn_mc.isUp;};
  //将HBannerListener侦听器对象注册到
  实例rotatebtn_mc和实例hbanner_mc
  rotatebtn_mc.addEventListener("onRotation",
  HBannerListener);
  hbanner_mc.addEventListener("onUpJudge",
  HBannerListener);
  制动旋钮类RotateBtn.as:
  import mx.events.EventDispatcher;
  class RotateBtn extends MovieClip {
  public var addEventListener:Function;
  public var removeEventListener:Function;
  private var dispatchEvent:Function;
  private var _isRotate:Boolean;
  function RotateBtn() {
  EventDispatcher.initialize(this);
  _isRotate = true;
  this.onRelease = startRotate;}//获取制动旋钮的状态
  public function get isUp():Boolean {
  return _isRotate;}
  private function startRotate() {//制动旋钮的旋转动作(略)
  ……
  //旋转结束改变制动旋钮的状态
  _isRotate = not _isRotate;
  //调度onRotation事件,将事件发送已注册的侦听器
  dispatchEvent({type:"onRotation"});}}
  横梁类hBannerMC.as:
  import mx.events.EventDispatcher;
  class hBannerMC extends MovieClip {
  public var addEventListener:Function;
  public var removeEventListener:Function;
  private var dispatchEvent:Function;
  private var _isMoveUp:Boolean;
  function hBannerMC() {
  EventDispatcher.initialize(this);}
  //获取制动旋钮的状态
  public function set isMoveUp(inValue:Boolean) {
  _isMoveUp = inValue;}
  private function RotateAction() {
  dispatchEvent({type:"onUpJudge"});
  //横梁的上抬、下降动作(略)
  ……}}
  以上程序完成了制动旋钮旋转横梁上抬、下降的动作,当然还需要进一步扩展,比如横梁在上抬、下降中还存在着左右方向的变化,这就牵涉到物和砝码质量的比较,可以用同样的方法将比较的结果发送到主程序中,横梁、托盘等物体侦听该结果,决定自己的运动方式。
  图3 用物理天平称量物体
  3.3 开发中应注意的一些事项
  (1)开始编写程序前,应先熟悉实验,清楚把握操作的要领,理清操作过程和各个对象间的逻辑关系;
  (2)每个对象单独建一个类,类之间的通讯通过主程序完成;
  (3)主程序不易过长,可以根据功能拆分为单个.as文件,比如增、减物和砝码的动作作为一个文件,判断横梁、托盘、物和砝码旋转方向的作为一个文件,操作中各种提示语的显示作为一个文件等等;
  (4)先解决主要问题,细节在后期一步步完善,有利于提高开发效率。
  
  4 小结
  
  虚拟仿真实验近几年在高校教学中得到了越来越多的运用,通过精心设计的软件,可以巩固和拓展学生所学知识,提高教学效率,降低教学成本;虚拟实验强大的网络功能,还能推动自主学习模式的开展,促进远程教育的发展。本文借助物理天平模拟调节的例子,介绍了基于FLASH的面向对象开发方法,其开发思路清晰、编程简单、充分利用了FLASH的交互功能,是开发虚拟仿真实验的一种有效方法。希望本文所述,能给致力于仿真实验开发的教师提供一个新的思路,为现代化教学做出一点贡献。
  
  参考文献:
  [1]颜金桫.Flash MX 2004 ActionScript 2.0与RIA应用程序开发[M].北京,电子工业出版社,2005:65-139.
  [2]吴凯威.“基于工程虚拟实验室”的设计与开发[J].实验室研究与探索,2006,25(5).
  [3]李柯.面向对象仿真方法框架研究[J].军械工程学院学报,2000,12(4).
  [4]黄悦微.基于FLASH技术的虚拟模拟电路实验场景[J].计算机工程与应用,2005(24).
  注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文

猜你想看
相关文章

Copyright © 2008 - 2022 版权所有 职场范文网

工业和信息化部 备案号:沪ICP备18009755号-3