国产黄色免费网站,人人干人人干人人干,免费大黄网站在线看,国产情侣一区二区三区,99精品国产福利免费一区二区,国产亚洲成归v人片在线观看,伊人88

2023信創(chuàng)獨角獸企業(yè)100強
全世界各行各業(yè)聯(lián)合起來,internet一定要實現(xiàn)!

Flash MX 2004新特性實例學習二

2004-02-12 eNet&Ciweek

  實例三、Customizing Context Menu

  一、涉及特性

  這個實例反映了Flash MX 2004在編程方面的重大改進。其中包括了as文件的應用,系統(tǒng)的_global.$clipboard變量的使用,ContextMenu(menufun) 函數(shù)的調用,ContextMenuItem()函數(shù)的調用,已經(jīng)MovieClip.prototype.menu變量的使用。通過這幾個函數(shù)和變量的操作,就可以輕松地操作Flash Player中的菜單了。

  二、制作過程

  1、新建一個Action Script File,命名為“ClipBoard.as”,內(nèi)容如下:

  

  /* 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:這是類的構造函數(shù),所謂的構造函數(shù)就是當實例化這個類的時候所調用的函數(shù)。比如本類的實例化可以是這樣的:ClipBoard cb = new ClipBoard();

  注釋5:定義一個cut函數(shù),傳入的參數(shù)是obj,它的調用范圍是public,也即是任何類都可以調用。

  注釋6:設置傳入的obj的alpha屬性為50。

  注釋7:設置注釋2中所定義的變量的值為obj。

  注釋8:設置注釋3所定義的變量的值為“cut”。

  注釋9:定義一個copy函數(shù),傳入的參數(shù)是obj,調用范圍是public。

  注釋10:定義一個paste函數(shù),沒有傳入的參數(shù),調用范圍是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,參數(shù)是newdepth和newname。這就實現(xiàn)了復制的功能。

  注釋20:設置所復制的Movie Clip的位置跟aplha。

  注釋21:如果operation不是“cut”也不是“copy”的話,直接返回。

  注釋22:定義一個函數(shù)isEmpty(),返回的類型為Boolean,調用的范圍為public。

  注釋23:根據(jù)contents的值做相應的操作。

  注釋24:定義一個函數(shù)handleMenuCommand,返回為空,調用范圍是public。

  注釋25:根據(jù)參數(shù)item的caption來做相應的操作,switch的功能跟多個if判斷差不多,但switch適用在判斷的條件可能很多的情況下。

  注釋26:如果caption的值是“Cut object”,調用cut (obj)函數(shù)。

  注釋27:如果caption的值是“Copy object”,調用copy (obj)函數(shù)。

  注釋28:如果caption的值是“Paste object”,調用paste(obj)函數(shù)。

  
  2、新建一個fla文件,保存在跟第一步所創(chuàng)建的ClipBoard.as在同一個目錄下面。

  3、按“Ctrl + F8”創(chuàng)建一個新的Movie Clip,命名為“square”,在此Movie Clip中用矩形工具繪制一個矩形。

  4、將第三步中創(chuàng)建的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是系統(tǒng)已經(jīng)有的了,所以可以直接用。

  注釋2:定義一個函數(shù)menuCallback,在創(chuàng)建菜單的時候用。

  注釋3:定義一個Boolean 類型的變量empty,它的值是調用函數(shù)_global.$clipboard.isEmpty()后所返回的值。

  注釋4:將menuObj的customItems設置為空數(shù)組。

  注釋5:判斷obj所具有的屬性。

  注釋6:將“cut”和“copy”添加到菜單中。

  注釋7:如果empty為假的話(也就是已經(jīng)有cut或copy操作),將paste添加到菜單中。

  注釋8:如果鼠標沒有選定對象的話,只將paste添加到菜單中。

  注釋9:實例化一個對象myMenu,其中構造函數(shù)調用了menuCallback函數(shù)。

  注釋10:實例化一個對象cutItem,這是一個子菜單,顯示的內(nèi)容為“Cut object”。

  注釋11:實例化一個對象copyItem,這是一個子菜單,顯示的內(nèi)容為“Copy object”。

  注釋12:實例化一個對象pasteItem,這是一個子菜單,顯示的內(nèi)容為“Paste object”。

    注釋13:將所定義的myMenu賦給系統(tǒng)。

  三、實際用途

  這個實例不單單為操作Flash Player的菜單提供了一種方法,也展示了怎么利用as文件來編程。了解清楚細節(jié),對掌握Flash MX 2004的編程很有用。

  

相關頻道: eNews

您對本文或本站有任何意見,請在下方提交,謝謝!

投稿信箱:tougao@enet16.com