关闭顶部展开顶部

Flash MX 2004新特性实例(3)_Flash教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:Flash MX 2004新特性实例(2)
实例二、BehaviorsScrapbook一、涉及特性此实例涉及的特性主要有两个:读取图片和设置Symbol的层次。不算是新增加的特性,但在性能方面的改进还是比较大的。

实例三、Customizing Context Menu

  一、涉及特性

  这个实例反映了Flash MX 2004在编程方面的重大改进。其中包括了as文件的应用,系统的_global.$clipboard变量的使用,ContextMenu(menufun) 函数的调用,ContextMenuItem()函数的调用,已经MovieClip.prototype.menu变量的使用。通过这几个函数和变量的操作,就可以轻松地操作Flash Player中的菜单了。

  二、制作过程

  1、新建一个Action Script File,命名为“ClipBoard.as”,内容如下:   

  /* Copyright 2003 Macromedia, Inc. All rights reserved.

  The following is Sample Code and is subject to all restrictions

  on such code as contained in the End User License Agreement

  accompanying this product.

  */   

  class ClipBoard extends Object{ //注释1   

  static var $contents:Object; //注释2

  static var $operation:String; //注释3   

  function ClipBoard() {} //注释4   

  static public function cut(obj) { //注释5

  obj._alpha = 50; //注释6

  $contents = obj; //注释7

  $operation = "cut"; //注释8

  }   

  static public function copy(obj) { //注释9

  $contents = obj;

  $operation = "copy";

  }   

  static public function paste() { //注释10

  if ($operation == "cut") { //注释11

  $contents._x = _root._xmouse; //注释12

  $contents._y = _root._ymouse;

  $contents._alpha = 100; //注释13

  $contents = undefined; //注释14

  $operation = ""; //注释15   

  } else if ($operation == "copy") { //注释16

  var newdepth = $contents._parent.getNextHighestDepth(); //注释17

  var newname = $contents._name newdepth; //注释18

  $contents.duplicateMovieClip(newname, newdepth); //注释19

  $contents._parent[newname]._x = _root._xmouse; //注释20

  $contents._parent[newname]._y = _root._ymouse;   

  $contents._alpha = 100;

  $contents._parent[newname]._alpha = 100;   

  } else {

  return; //注释21

  }

  }   

  public function isEmpty():Boolean { //注释22

  if ($contents != undefined) { //注释23

  return false;

  } else {

  return true;

  }

  }  

  public function handleMenuCommand(obj, item):Void { //注释24

  switch (item.caption) { //注释25

  case "Cut object": //注释26

  cut(obj);

  break;   

  case "Copy object": //注释27

  copy(obj);

  break;   

  case "Paste object": //注释28

  paste();

  break;

  }

  }

  }

 本实例有比较多的编程知识,刚接触会有无从下手的感觉,下面来具体讲解一下涉及的东西。

  注释1:class的意思是定义一个类,extends是表示所定义的类的基类是Object。这个涉及到编程的面向对象,可能比较难懂,可以把Object看成是所定义的类的父类,父类具有的方法和属性,在子类中都是有的。

  注释2:定义一个变量contents,类型为Object。Flash MX 2004中都是这样定义变量的。在此处定义的变量,在整个类中都是可以用的。

  注释3:定义一个变量operation,类型为String。

  注释4:这是类的构造函数,所谓的构造函数就是当实例化这个类的时候所调用的函数。比如本类的实例化可以是这样的:ClipBoard cb = new ClipBoard();

  注释5:定义一个cut函数,传入的参数是obj,它的调用范围是public,也即是任何类都可以调用。

  注释6:设置传入的obj的alpha属性为50。

  注释7:设置注释2中所定义的变量的值为obj。

  注释8:设置注释3所定义的变量的值为“cut”。

  注释9:定义一个copy函数,传入的参数是obj,调用范围是public。

  注释10:定义一个paste函数,没有传入的参数,调用范围是public。

  注释11:判定所定义的operation的值是否为“cut”。

  注释12:设置contents的xy坐标为鼠标的xy坐标。    

注释13:设置contents的alpha为100。

  注释14:利用完contents的值后,将contents的值重新设置为undefined。

  注释15:将operation的值清空。

  注释16:判定所定义的operation的值是否为“copy”。

  注释17:定义一个变量newdepth,设置它的值为类中所定义的contents的深度。

  注释18:定义一个变量newname,设置它的值为contents的实例名加上所在的深度。

  注释19:复制一个Movie Clip,参数是newdepth和newname。这就实现了复制的功能。

  注释20:设置所复制的Movie Clip的位置跟aplha。

  注释21:假如operation不是“cut”也不是“copy”的话,直接返回。

  注释22:定义一个函数isEmpty(),返回的类型为Boolean,调用的范围为public。

  注释23:根据contents的值做相应的操作。

  注释24:定义一个函数handleMenuCommand,返回为空,调用范围是public。

  注释25:根据参数item的caption来做相应的操作,switch的功能跟多个if判定差不多,但switch适用在判定的条件可能很多的情况下。

  注释26:假如caption的值是“Cut object”,调用cut (obj)函数。

  注释27:假如caption的值是“Copy object”,调用copy (obj)函数。

  注释28:假如caption的值是“Paste object”,调用paste(obj)函数。

 2、新建一个fla文件,保存在跟第一步所创建的ClipBoard.as在同一个目录下面。

  3、按“Ctrl F8”创建一个新的Movie Clip,命名为“square”,在此Movie Clip中用矩形工具绘制一个矩形。

  4、将第三步中创建的Movie Clip“square”拖到场景中,在它的Action面板上添加如下的Action Script:   

  on (release) { //注释1

  stopDrag();

  }

  on (press) { //注释2

  startDrag(this);

  mx.behaviors.DepthControl.bringToFront(this);

  }

  注释1:当松开鼠标的时候,停止拖动对象。

  注释2:当按下鼠标的时候,开始拖动对象,并将对象设置在最前面一层。

  5、在主场景的Time Line中增加一个Layer,命名为“Action”,在此层的Action面板上添加如下的Action Scipt:   

  /* Copyright 2003 Macromedia, Inc. All rights reserved.

  The following is Sample Code and is subject to all restrictions

  on such code as contained in the End User License Agreement

  accompanying this product.

  */   

  _global.$clipboard = new ClipBoard(); //注释1   

  function menuCallback (obj, menuObj) { //注释2

  var empty:Boolean = _global.$clipboard.isEmpty(); //注释3

  menuObj.customItems = ; //注释4

  if ((obj instanceof MovieClip) && (obj != _level0)) { //注释5

  menuObj.customItems.push(cutItem); //注释6

  menuObj.customItems.push(copyItem);

if (!empty) { //注释7

  menuObj.customItems.push(pasteItem);

  }   

  } else if (obj == _level0 && !empty) { //注释8

  menuObj.customItems.push(pasteItem);

  }

  }   

  var myMenu = new ContextMenu(menuCallback); //注释9

  //注释10

  var cutItem = new ContextMenuItem("Cut object", _global.$clipboard.handleMenuCommand);

  //注释11

  var copyItem = new ContextMenuItem("Copy object", _global.$clipboard.handleMenuCommand);

  //注释12

  var pasteItem = new ContextMenuItem("Paste object", _global.$clipboard.handleMenuCommand);

  //注释13

  MovieClip.prototype.menu = myMenu;

  注释1:这里就是刚刚所定义的ClipBoard ()的实例化,不过_global.$clipboard是系统已经有的了,所以可以直接用。

  注释2:定义一个函数menuCallback,在创建菜单的时候用。

  注释3:定义一个Boolean 类型的变量empty,它的值是调用函数_global.$clipboard.isEmpty()后所返回的值。

  注释4:将menuObj的customItems设置为空数组。

  注释5:判定obj所具有的属性。

  注释6:将“cut”和“copy”添加到菜单中。

  注释7:假如empty为假的话(也就是已经有cut或copy操作),将paste添加到菜单中。

  注释8:假如鼠标没有选定对象的话,只将paste添加到菜单中。

  注释9:实例化一个对象myMenu,其中构造函数调用了menuCallback函数。

  注释10:实例化一个对象cutItem,这是一个子菜单,显示的内容为“Cut object”。

  注释11:实例化一个对象copyItem,这是一个子菜单,显示的内容为“Copy object”。

  注释12:实例化一个对象pasteItem,这是一个子菜单,显示的内容为“Paste object”。

注释13:将所定义的myMenu赋给系统。

  三、实际用途

  这个实例不单单为操作Flash Player的菜单提供了一种方法,也展示了怎么利用as文件来编程。了解清楚细节,对把握Flash MX 2004的编程很有用。


分享:Flash MX 2004新特性实例(1)
实例一、AccessibleApplications一、涉及特性这个实例主要涉及新增组件的应用,以及对组件的编程。在2004中,组件分为Data、Media、UI三大类别。让人惊喜的

来源:设计前沿网上收集//所属分类:Flash教程/更新时间:2008-03-05
相关Flash教程
闂佹眹鍩勯崹閬嶆偤閺囶澁缍栭柛鈩冪⊕閳锋帗銇勯弴妤€浜惧銈忕秶閹凤拷
濠电偛顕慨顓㈠磻閹炬枼妲堥柡鍌濇硶婢ф稒淇婇懠顒夆偓婵嬫煟閵忊晛鐏查柟鍑ゆ嫹
濠电姷顣介埀顒€鍟块埀顒勵棑缁辩偛顓兼径瀣閻庣懓瀚竟鍡欐崲娑斾線鏌i姀鈺佺伈闁瑰嚖鎷�
濠电姷顣介埀顒€鍟块埀顒勵棑缁辩偛顓兼径濠勵吋闂佽鍨庨崟顓фК闂佽閰eḿ褍螞濞戙垺鍋夐柨鐕傛嫹
闂備胶枪缁绘劙骞婃惔銊ョ劦妞ゆ帒鍊哥敮鍫曞箹鐎涙ḿ鐭掔€规洘绻堥弫鎾绘晸閿燂拷
闂備胶枪缁绘劙骞婃惔銊ョ劦妞ゆ巻鍋撻柛姘儑缁﹪鏁傞崜褏鐓撻柣搴岛閺呮繈鎯屽▎鎴犵=濞撴艾锕ョ€氾拷
闂備浇銆€閸嬫挻銇勯弽銊р槈闁伙富鍣i弻娑樷攽閹邦亞鑳虹紓浣靛妽濡炶棄顕i妸鈺婃晬婵炲棙鍨电粭锟犳⒑閸濆嫬鈧骞婇幘鑸殿潟闁跨噦鎷�
闂備礁鎼崯鐗堟叏妞嬪海绀婂鑸靛姈閻擄綁鎮规潪鎷岊劅婵炲眰鍊曢湁闁挎繂妫欑粈鈧梺鍛娚戦悧鐘茬暦閹扮増鏅搁柨鐕傛嫹
婵犵妲呴崹顏堝礈濠靛棭鐔嗘俊顖氬悑鐎氱粯銇勯幘瀵哥畺閻庢熬鎷�
濠电姷顣介埀顒€鍟块埀顒勵棑缁辩偛顓奸崶銊ヮ伕濡炪倖鎸荤换鍐偓姘虫珪娣囧﹪顢涘Δ鈧晶鍙夌節椤喗瀚�
婵犵妲呴崹顏堝礈濠靛棭鐔嗘慨妞诲亾鐎规洦鍓熼、娆撳礂閻撳簶鍋撻悽鍛婄厸闁割偅绻勫瓭婵犳鍣幏锟�
婵犵妲呴崹顏堝礈濠靛棭鐔嗘慨妞诲亾闁哄苯鎳橀崺鈧い鎺嗗亾闁宠閰i獮鎴﹀箛闂堟稒顔嗛梻浣告惈鐎氭悂骞忛敓锟�
婵犵妲呴崹顏堝礈濠靛棭鐔嗘慨妞诲亾鐎规洩缍侀獮瀣攽閸偂绱�
濠电姷顣介埀顒€鍟块埀顒勵棑缁辩偛顓兼径濠勭厬闂佺懓鐡ㄧ换鍕敂鐎涙ü绻嗘い鏍殔婢у弶绻濋~顔藉
闂佽楠搁崢婊堝礈濠靛鍋嬮柟鎯版閻鈹戦悩鎻掓殭闁奸潧缍婇弻銈夋嚍閵夈儱顫嶉梺缁樼壄缂嶄礁鐣峰▎鎾存櫢闁跨噦鎷�
UB闂備礁婀辩划顖炲礉濡ゅ懐宓侀柛銉㈡櫆鐎氭岸鎮楀☉娅虫垿锝為敓锟�
闂備浇澹堟ご绋款潖婵犳碍鐒鹃悗鐢电《閸嬫捇鐛崹顔句痪濠电姭鍋撻柨鐕傛嫹
闂佽楠哥粻宥夊垂閸濆嫸鑰块柛銏㈠殰
闂備礁鎲″缁樻叏妞嬪海绀婂璺虹灱閸楁碍绻涢崱妤€顒㈤柛鐐差槹缁绘稓绱欓悩鍝勫帯闂佺ǹ楠忛幏锟�
缂傚倸鍊烽悞锕傛偡閿曞倸鍨傛繝濠傚椤╅攱銇勯幒宥囶槮缂佹彃婀遍埀顒傚仯閸婃繄绱撳棰濇晩闁跨噦鎷�
©2017 www.mb5u.com婵犵妲呴崹顏堝礈濠靛棭鐔嗘慨妞诲亾鐎殿噮鍣i幃鈺呭箵閹烘挸鐦�
闂備浇銆€閸嬫捇鏌熼婊冾暭妞ゃ儻鎷�&闂備礁鎲$敮鎺懳涢弮鍫燁棅闁跨噦鎷�