分享

ActionScript菜鸟基础终极教程10

 关东老圃 2013-03-30
用Flash制作的表单
  其中,第1个输入文本框采用单行格式,第2个输入文本框采用密码格式,第3个输入文本框采用多行格式,并设置了30像素的缩进。3个输入文本变量名分别为name、paword和words,使用ActionScript分别控制3个文本框中的最大字符数。当单击按钮Clear时,清除3个文本框中的内容,当单击按钮Submit时,提交所填的内容。因为这里还没学到Flash与服务器的交互,所以将用 户所填内容通过输出窗口显示出来。
  打开文件form.fla,分别查看一下3个输入文本框的属性面板中的设置。
  在主场景中新建一层Actions,打开其动作面板,其中添加了如下ActionScript:
  Key.addListener(_root);
  _root.onKeyUp = function() {
  if (_root.name.length>8) {
  _root.name = _root.name.substr(0, 8);
  }
  if (_root.paword.length>16) {
  _root.paword = _root.paword.substr(0, 16);
  }
  if (_root.words.length>150) {
  _root.words = _root.words.substr(0, 150);
  }
  };
  以上脚本控制3个文本框中的最大字符数,当在文本框中输入的字符数超过了限制,则使用substr函数从输入的字符串中截取指定长度的字符串。
  选中按钮Clear,打开其动作面板,其中添加了如下ActionScript:
  on (release) {
  _root.name = "";
  _root.paword = "";
  _root.words = "";
  }
  选中按钮Submit,打开其动作面板,其中添加了如下ActionScript:
  on (release) {
  trace("Welcome "+_root.name+" !");
  trace("Your password is "+_root.paword+" .");
  }

  第10章

  动态文本

  在制作游戏的时候,有时需要一个文本框来记录用户的游戏得分,这个分数是根据游戏情况动态改变的。这时候,我们就需要用到动态文本。
  动态文本与输入文本的区别在于它不能直接接受用户输入。
  但是,动态文本可以用来显示不同样式和字体的文本。

  10.1 动态文本
  和输入文本一样,使用文本工具可以创建动态文本框,只需在属性面板中选择“动态文本”即可,如图10-1所示。

  要让动态文本框动态地显示文本,就需要在属性面板中为其设置变量名。如图10-1所示,将动态文本的变量名设为  myDynamicText。在Flash影片播放时,只需改变动态文本变量的值,就可以改变动态文本框中显示的文本。
  动态文本有3种基本格式:单行、多行和多行不换行,它没有输入文本的密码格式。
  属性面板中间有3个按钮,其中:
  = :可选,它决定了是否可以对动态文本框中的文本执行选择、复制、剪切等操作,按下表示可选。如果是输入文本,它是默认按下并且不可改变的,因为输入文本一定是可选的。
  = :将文本呈现为HTML,它决定了动态文本框中的文本是否可以使用HTML格式,即使用HTML语言为文本设置格式。
  = :在文本周围显示边框,它决定了是否在动态文本框周围显示边框。
  怎样才能让动态文本框显示需要的文本呢?如下所示的脚本即在变量名为myDynamicText的动态文本框中显示 “Welcome to ActionScript!”:
  myDynamicText = "Welcome to ActionScript!";
  上面的脚本是加在动态文本所在的时间轴上的。
  动态文本的使用虽然很简单,但是用它可以做许多事情。

  10.2 HTML格式
  HTML即超文本置标语言,它是网页格式的一种显示规范。在浏览网页时,浏览器通过解读HTML标记将网页中的各种元素显示成需要的样式。在Flash中可以使用HTML来设置动态文本的格式。要使用HTML,首先需要按下属性面板中的 按钮。在Flash中使用HTML标记为动态文本设置格式的ActionScript如下所示:

点击放大

  运行该脚本,动态文本框如图10-2所示。

Flash中使用的并不是完整的HTML,而只是HTML中的一些标记,使用这些标记可以轻松地为动态文本设置各种格式。
  Flash MX中可用的所有HTML标记如下所示:
  = :粗体
  = :斜体
  = :下划线
  = :设置字体
  = :设置字号
  = :网页超链接
  =

 


 

:定义段落
  =
:换行

 

  10.3 从文本文件中获取变量
  通过ActionScript可以调用Flash影片外部文本文件中的变量。从外部文件中获取变量的方法非常有用,它可以在不改变Flash文件的基础上对Flash影片的内容作出修改。例如要用Flash制作一个天气预报动画,如果每天都对Flash文件进行修改就太麻烦了。而使用外部变量就只需要对文本文件作出修改。
  要从外部文件中获取变量需要用到的命令是loadVariables,如下所示:
  loadVariables("weather.txt", _root);
  其中,第1个参数是Flash影片要获取变量的文件位置,第2个参数是文本变量要加载到的位置,可以是_root,也可以是某个影片剪辑或深度级别。Flash将来自外部文件中的变量值加载到与指定位置中具有相同变量名的文本字段中。
  使用loadVariables命令要注意的是,指定的文本应以Flash影片中的文本变量名开始,否则不能被加载。本例weather.txt中的内容如下所示:
  myDynamicText=Today is Friday,it's rainy!
  打开文件loadVariables.fla,在主时间轴中有一个动态文本框,其变量名与weather.txt中的文本字段相同,当运行前面的脚本时,该文本框中显示:
  Today is Friday,it's rainy!
  如果在文本文件中为变量指定多行字符串,Flash将自动识别换行符,从而实现自动换行。
  您可以修改文本文件中的内容,Flash中动态文本显示的内容也将作出相应的改变。

  10.4 练习:滚动新闻
  下面利用loadVariables命令和字符串函数制作如图10-3所示的滚动新闻栏。

  图10-3 滚动新闻栏
  (1)新建一个Flash文档并保存。
  (2)在场景中绘制一个动态文本框,在属性面板中将其变量名设为text。
  (3)选中文本框,按F8键将其转换为影片剪辑元件,在属性面板中将该影片剪辑实例命名为news。
  (4)选中影片剪辑实例news,打开其动作面板,在其中添加如下ActionScript:
  onClipEvent (load) {
  loadVariables("news.txt", news);
  v = 0;
  }
  onClipEvent (enterFrame) {
  v++;
  if (v == 1) {
  text = text.substr(1, text.length-1)+text.substr(0, 1);
  v = 0;
  }
  }
  在onClipEvent(load)事件中使用loadVariables命令将外部文件news.txt中的文本调入到Flash影片中。
  变量v用来控制新闻滚动的速度。
  在onClipEvent(enterFrame)事件中使用String对象的substr方法将text中的字符串分拆重组,以实现字符串滚动的效果。
  (5)在与该Flash文档保存位置相同的位置创建一个文本文档news.txt,在其中添加如下所示的字符:
  text=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  其中的text变量与Flash中的动态文本变量名相同,其后的字符串可以根据需要添加。测试影片

 

 

第11章

  Math对象

  作为一门编程语言,进行数学计算是必不可少的。在数学计算中经常会使用到数学函数,如取绝对值、开方、取整、求三角函数值等,还有一种重要的函数是随机函数。ActionScript将所有这些与数学有关的方法、常数、三角函数以及随机数都集中到一个对象里面——Math对象。
  Math对象是ActionScript的一块敲门砖,只有掌握了它,才能真正对ActionScript动画编程做到运用自如。

  11.1 Math对象的方法
  11.1.1 Math.abs
  Math对象中集合了许多常用数学函数。Math.abs就是用来计算一个数的绝对值,即一个数去掉正负符号后的值。其用法如下:
  x=Math.abs(-9);
  或:
  x=Math.abs(num1-num2);

  11.1.2 Math.round
  Math.round方法将一个浮点数四舍五入为最接近的整数,如:
  trace(Math.round(9.4));
  trace(Math.round(9.5));
  trace(Math.round(-9.4));
  trace(Math.round(-9.5));
  trace(Math.round(-9.6));
  输出窗口中将显示:
  9、10、-9、-9、-10

  11.1.3 Math.ceil、Math.floor
  Math.ceil方法取比一个浮点数大且最接近的整数,Math.floor方法取比一个浮点数小且最接近的整数。如:
  trace(Math.ceil(9.1));
  trace(Math.floor(9.1));
  trace(Math.ceil(-9.1));
  trace(Math.floor(-9.1));
  输出窗口中将显示:
  10、9、-9、-10

  11.1.4 Math.min、Math.max
  Math.min方法取两个数中较小的一个数,Math.max方法取两个数中较大的一个数,如:
  trace(Math.min(9, 8));
  trace(Math.max(9, 8));
  输出窗口中显示:
  8、9

  11.1.5 Math.pow
  Math.pow方法用来计算一个数的乘方,它包含两个参数,第1个参数是底数(要乘方的数),第2个参数是幂(乘方数)。如计算5的3次方:
  trace(Math.pow(5, 3));
  输出窗口中显示:
  125
  Math.pow方法也可以计算一个数的开方,如计算125的开3次方:
  trace(Math.pow(125, 1/3));
  输出窗口中显示
  5

  11.1.6 Math.sqrt
  除了用Math.pow计算一个数的开方,还可以使用Math.sqrt计算一个数的平方根,如计算64的平方根:
  trace(Math.sqrt(64));
  输出窗口中显示
  8
  它等同于:
  trace(Math.pow(64, 1/2));

  11.2 Math对象的常数
  Math对象的常数有以下几个:
  = Math.PI:圆周率(大约为3.141593)。
  = Math.SQRT1_2:1/2的平方根的倒数(大约为0.707107)。
  = Math.SQRT2:2的平方根(大约为1.414214)。
  = Math.E:欧拉(Euler)常数,自然对数的底(大约为2.718282)。
  = Math.LN2:2的自然对数(大约为0.693147)。
  = Math.LN10:10的自然对数(大约为2.302585)。
  = Math.LOG2E:e的以2为底的对数(大约为1.442695)。
  = Math.LOG10E:e的以10为底的对数(大约为0.434294)。
  其中Math.PI用得较多,如下面的脚本将弧度值arcdegree转换为角度值angledegree:
  angledegree = arcdegree*(180/Math.PI);
  下面的ActionScript将弧度1转换为角度:
  arcdegree = 1;
  angledegree = arcdegree*(180/Math.PI);
  trace(angledegree);
  输出窗口中显示:
  57.2957795130823

  11.3 三角函数
  Math对象中的三角函数有:
  = Math.sin:正弦
  = Math.cos:余弦
  = Math.tan:正切
  = Math.asin:反正弦
  = Math.acos:反余弦
  = Math.atan:反正切
  = Math.atan2:从x坐标轴到点的角度
  三角函数在ActionScript中有着举足轻重的地位,它们在制作一些特效动画时将发挥重要的作用。
  在程序语言中通常以x和y标记位置,但是在一个圆周上使用x和y来标记位置并不是很容易。三角函数在处理与圆周相关的位置参数时很有效。如用某个圆的圆心位置为(x0,y0),半径为r,可以用y0+r*Math.sin(0)表示该圆水平直径右端点的纵坐标,用x0+r*Math.cos(0)表示该圆水平直径右端点的横坐标。如图11-1所示用正弦函数和余弦函数标出了一个圆周上4个点的坐标。

如下所示的ActionScript使影片剪辑绕圆周运动:
  onClipEvent (load) {
  i = 0;
  r = 150;
  x0 = 275;
  y0 = 200;
  }
  onClipEvent (enterFrame) {
  i += 10;
  this._x = x0+r*Math.cos(i/(180/Math.PI));
  this._y = y0+r*Math.sin(i/(180/Math.PI));
  }
  此时的影片剪辑是沿顺时针方向转动的,如要让它沿相反方向转动,只需将i += 10改写成i -= 10即可。
  ActionScript中的三角函数都是按照弧度计算的。一个完整圆周的弧度数为2*Math.PI,大约是6.283185,而一个圆周的角度数是360。如要在三角函数中使用角度数,需要将其除以180/Math.PI以转换为弧度数。
  在上面的脚本中,i的值是递增的,而并没有限定在0~360之间。这是因为正弦函数和余弦函数是定义在负无穷~正无穷上的周期函数,它们的值是以360°为周期循环的。

  11.4 字符串和数字的转换
  在ActionScript中,字符串和数字之间可以相互转换。在很多时候,将字符串转换为数字或将数字转换为字符串都是很有必要的。例如,在Flash中有一个变量名为n的输入文本框和一个按钮,按钮中的ActionScript如下:
  on (release) {
  trace(n+7);
  }
  当在输入文本框中输入11,再单击按钮时,输出窗口将显示字符串“11”与字符串“7”相加的结果117,而不是数字11与数字7相加的结果8。这是因为从输入文本框中获得的是字符串,当表达式中有字符串和数字时,ActionScript优先考虑字符串,将数字转换为字符串后再进行字符串运算。
  为了将字符串转换成数字,可以使用ActionScript提供的函数Number,如将上例所示的脚本改写成如下所示:
  on (release) {
  trace(Number(n)+7);
  }
  当在输入文本框中输入11,再单击按钮时,输出窗口将显示结果18。
  如果Number函数中的参数不能转换成数字,则返回结果NaN。
  以“0x”开头的字符串将被解释为十六进制数。
  对于布尔值,true将转换为1,false将转换为0。例如将上例所示的脚本改写成如下所示:
  on (release) {
  n = n>10;
  trace(Number(n));
  }
  当输入的值小于等于10时,输出窗口中显示0;当输入的值大于10时,输出窗口中显示1。
  除了Number函数以外,函数parseInt可以将字符串转换成整数,函数parseFloat可以将字符串转换为浮点数。如将上例所示的脚本改写成如下所示:
  on (release) {
  trace(parseInt(n)+7);
  trace(parseFloat(n)+7);
  }
  当在输入文本框中输入11.99,再单击按钮时,输出窗口中将显示18和18.99。
  parseInt和parseFloat在处理字符串时比Number函数更专业一点,它们可以从字符串中取出能转换成数字的最长字符串进行转换,而忽略后面不能转换成数字的字符串。如将上例的脚本改写成如下所示:
  on (release) {
  trace(Number(n)+7);
  trace(parseInt(n)+7);
  trace(parseFloat(n)+7);
  }
  当在输入文本框中输入11t7.9并单击按钮时,输出窗口中将显示
  NaN、18、18
  parseInt函数可以有两个参数,第2个参数在2~36之间,表示要转换的数字的基数,即进制数。如将二进制数1101转换为十进制整数:
  trace(parseInt(1101, 2));
  输出窗口中显示13。
  要将数字转换成字符串可以使用Number对象(动作面板的“对象”/“核心”目录)的toString方法。要使用toString方法需要先创建一个Number对象,其用法如下:
  myNumber = new Number(15);
  trace(myNumber.toString(2));
  trace(myNumber.toString(16));
  toString中的参数与parseInt函数的第2个参数一样,都表示进制数。本例中的2和16分别表示将myNumber转换为二进制数和16进制数。运行脚本,输出窗口中显示
  1111
  f
  如果省略参数,默认为十进制。

  11.5 随机数
  随机数在Flash中的应用非常广泛。
  在Flash 5以前的版本中,使用random函数获取一个近似的随机数,如random(10)随机返回0~9这10个整数中的一个。但在Flash MX中推荐使用Math对象的random方法,即Math.random(),该方法返回一个大于或等于0并且小于1的随机浮点数。
  Math.random方法比random函数得到的结果更精确,但它并不能直接产生一个整数。我们可以使用别的办法将 Math.random方法产生的随机数转换为我们需要的整数,如要得到一个1~10之间的随机整数,可以使用如下所示的 ActionScript:
  trace(Math.floor(Math.random()*10+1));

  11.6 练习:下雪
  打开文件snow.fla,这是一个利用attachMovie和Math.random方法制作的下雪效果,其中每一片雪花的大小、方向各不相同,如图11-2所示。

  该动画中形状各异的雪花与Math.random函数密不可分,下面来看它的制作方法。
  (1)在库面板中为snow影片剪辑创建链接,其链接标识符为snow,如图11-3所示。

  此主题相关图片如下:

  图11-3 为影片剪辑添加链接
  (2)将snow元件拖到场景中,选中该影片剪辑实例,在其中添加如下ActionScript:
  onClipEvent (load) {
  this._visible = false;
  v0 = 3; //速度
  num = 50; //数量
  vx = new Array(); //记录水平速度的数组
  vy = new Array();成 //记录垂直速度的数组
  for (var i = 1; i<=num; i++) {
  _root.attachMovie("snow", "snow"+i, i); //附加num个影片剪辑实例
  scale = 100*Math.random()+50; //随机设定实例大小
  with (_root["snow"+i]) { //with语句
  _xscale = scale;
  _yscale = scale;
  _x = 500*Math.random(); //随机出现在影片水平宽度范围
  _y = 400*Math.random(); //随机出现在影片垂直高度范围
  _rotation = 360*Math.random(); //随机旋转一个角度
  vx[i] = v0*Math.random()+v0; //随机取得水平方向上的速度
  vy[i] = v0*Math.random()+v0; //随机取得垂直方向上的速度
  }
  }
  }
  onClipEvent (enterFrame) {
  for (var i = 1; i<=num; i++) {
  with (_root["snow"+i]) {
  _x += vx[i]; //在水平方向上运动
  _y += vy[i]; //在垂直方向上运动
  if (_x<0) { //超出左边界,从右边界进入
  _x = 500;
  }
  if (_x>500) { //超出右边界,从左边界进入
  _x = 0;
  }
  if (_y>400) { //超出下边界,从上边界进入
  _y = 0;
  }
  }
  }
  }
  以上脚本除了用到数组、attachMovie、Math.random等知识外,还用到了with动作。with动作用来为一组动作脚本指定一个对象,如本例用with动作指定对象_root["snow"+i],并在其后的大括号中对该对象的多种属性进行修改,从而避免了为每一个属性重复指定相同的对象,使脚本更紧凑和更简化。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多