应用思考-教育技术论坛

标题: 物理中力的图示组件(as2.0) [打印本页]

作者: 铁血    时间: 2007-11-28 23:11
标题: 物理中力的图示组件(as2.0)
ForceSchemaClass内容:
//铁血制作
class ForceSchemaClass extends MovieClip{//ForceSchemaClass类继承MC
[Inspectable]//元数据标记(可以出现在参数列表中)
public var f:Array;
[Inspectable]
public var theta:Array;
[Inspectable]
public var fname:Array;
public function ForceSchemaClass(){
        drawLine(f,theta,fname); //调用drawLine函数画图,f,theta,fname分别
                            //为力的大小、力的角度(与水平向右方向的夹角)、力的名称
}
private  function drawLine(f:Array,theta:Array,fname:Array):Void{//drawLine方法
var t = 0;
this.lineStyle(2, 0xFF0000, 100);
var cos = Math.cos;
var sin = Math.sin;
var PI = Math.PI;
var f =f;
var theta =theta;
this.onEnterFrame = function() {
  if (t<f.length) {
   this.moveTo(0, 0);
   this.lineTo(f[t]*cos(theta[t]*PI/180), -f[t]*sin(theta[t]*PI/180));//力的大小
   this.lineTo((f[t]-10)*cos(theta[t]*PI/180)+5*sin(theta[t]*PI/180), -(f[t]-10)*sin(theta[t]*PI/180)+5*cos(theta[t]*PI/180));//箭头的一撇
   this.moveTo(f[t]*cos(theta[t]*PI/180), -f[t]*sin(theta[t]*PI/180));
   this.lineTo((f[t]-10)*cos(theta[t]*PI/180)-5*sin(theta[t]*PI/180), -(f[t]-10)*sin(theta[t]*PI/180)-5*cos(theta[t]*PI/180));//箭头另一撇
   this.createTextField("pos"+t, t, 0, 0, 40, 50);//力的标签
   this["pos"+t]._x = f[t]*cos(theta[t]*PI/180)+5;
   this["pos"+t]._y = -f[t]*sin(theta[t]*PI/180)-5;
   this["pos"+t].text = this.fname[t].toString();
  } else {
   delete this.onEnterFrame;
  }
  t++;
};
};
}
源文件:
(, 下载次数: 7)
作者: 铁血    时间: 2008-5-22 22:02
改成了AS3版:
效果
(, 下载次数: 10)
代码:
  1. package {
  2.         import flash.display.Sprite;
  3.         import flash.text.TextField;
  4.         public class ForceSchema extends Sprite {
  5.                 private var _force:Number;
  6.                 private var _theta:Number;
  7.                 private var _fname:String;
  8.                 private var _radians:Number;
  9.                 private var _fx:Number;
  10.                 private var _fy:Number;
  11.                 private var _ftext:TextField;
  12.                 public function ForceSchema(fx:Number,fy:Number,force:Number,theta:Number,fname:String) {
  13.                         this._force=force;
  14.                         this._theta=theta;
  15.                         this._fname=fname;
  16.                         _fx=fx;
  17.                         _fy=fy;
  18.                         _radians=_theta * Math.PI / 180;
  19.                         init();
  20.                 }
  21.                 private function init():void {
  22.                         drawline();
  23.                 }
  24.                 private function drawline():void {
  25.                         this.graphics.lineStyle(2,0xFF0000,100);
  26.                         this.graphics.moveTo(_fx,_fy);
  27.                         this.graphics.lineTo(_fx+_force*Math.cos(_radians), _fy-_force*Math.sin(_radians));//力的大小
  28.                         this.graphics.lineTo(_fx+(_force - 10) * Math.cos(_radians) + 5 * Math.sin(_radians),_fy-(_force - 10)* Math.sin(_radians) + 5 * Math.cos(_radians));//箭头的一撇
  29.                         this.graphics.moveTo(_fx+_force*Math.cos(_radians), _fy-_force*Math.sin(_radians));
  30.                         this.graphics.lineTo(_fx+(_force - 10) * Math.cos(_radians) - 5 * Math.sin(_radians),_fy-(_force - 10)* Math.sin(_radians) - 5 * Math.cos(_radians));//箭头另一撇
  31.                         _ftext=new TextField;
  32.                         addChild(_ftext);
  33.                         this._ftext.x = _fx+_force*Math.cos(_radians)+5;
  34.                         this._ftext.y = _fy-_force*Math.sin(_radians)-5;
  35.                         _ftext.autoSize="left";
  36.                         _ftext.text=_fname;
  37.                 }
  38.         }
  39. }
复制代码
源文件:
(, 下载次数: 2)

[ 本帖最后由 铁血 于 2008-5-22 22:03 编辑 ]
作者: 铁血    时间: 2008-5-22 22:05
ForceSchema(x,y,力的大小,力的方向,力的符号)
作者: king_mountain    时间: 2009-1-26 11:27
好啊!!!!




欢迎光临 应用思考-教育技术论坛 (http://etthink.com/) Powered by Discuz! X3.4