久久―日本道色综合久久,亚洲欧美精品在线,狼狼色丁香久久婷婷综合五月,香蕉人人超,日本网站黄,国产在线观看不卡免费高清,无遮挡的毛片免费

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

Flash MX 2004新特性實(shí)例學(xué)習(xí)二

2004-02-12 eNet&Ciweek

  實(shí)例三、Customizing Context Menu

  一、涉及特性

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

  二、制作過程

  1、新建一個(gè)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;

  }

  }

  }

  
  本實(shí)例有比較多的編程知識(shí),剛接觸會(huì)有無從下手的感覺,下面來詳細(xì)講解一下涉及的東西。

  注釋1:class的意思是定義一個(gè)類,extends是表示所定義的類的基類是Object。這個(gè)涉及到編程的面向?qū)ο?,可能比較難懂,可以把Object看成是所定義的類的父類,父類具有的方法和屬性,在子類中都是有的。

  注釋2:定義一個(gè)變量contents,類型為Object。Flash MX 2004中都是這樣定義變量的。在此處定義的變量,在整個(gè)類中都是可以用的。

  注釋3:定義一個(gè)變量operation,類型為String。

  注釋4:這是類的構(gòu)造函數(shù),所謂的構(gòu)造函數(shù)就是當(dāng)實(shí)例化這個(gè)類的時(shí)候所調(diào)用的函數(shù)。比如本類的實(shí)例化可以是這樣的:ClipBoard cb = new ClipBoard();

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

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

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

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

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

  注釋10:定義一個(gè)paste函數(shù),沒有傳入的參數(shù),調(diào)用范圍是public。

  注釋11:判斷所定義的operation的值是否為“cut”。

  注釋12:設(shè)置contents的xy坐標(biāo)為鼠標(biāo)的xy坐標(biāo)。

    

    注釋13:設(shè)置contents的alpha為100。

  注釋14:利用完contents的值后,將contents的值重新設(shè)置為undefined。

  注釋15:將operation的值清空。

  注釋16:判斷所定義的operation的值是否為“copy”。

  注釋17:定義一個(gè)變量newdepth,設(shè)置它的值為類中所定義的contents的深度。

  注釋18:定義一個(gè)變量newname,設(shè)置它的值為contents的實(shí)例名加上所在的深度。

  注釋19:復(fù)制一個(gè)Movie Clip,參數(shù)是newdepth和newname。這就實(shí)現(xiàn)了復(fù)制的功能。

  注釋20:設(shè)置所復(fù)制的Movie Clip的位置跟aplha。

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

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

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

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

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

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

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

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

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

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

  4、將第三步中創(chuàng)建的Movie Clip“square”拖到場(chǎng)景中,在它的Action面板上添加如下的Action Script:

  

  on (release) { //注釋1

  stopDrag();

  }

  on (press) { //注釋2

  startDrag(this);

  mx.behaviors.DepthControl.bringToFront(this);

  }

  注釋1:當(dāng)松開鼠標(biāo)的時(shí)候,停止拖動(dòng)對(duì)象。

  注釋2:當(dāng)按下鼠標(biāo)的時(shí)候,開始拖動(dòng)對(duì)象,并將對(duì)象設(shè)置在最前面一層。

  5、在主場(chǎng)景的Time Line中增加一個(gè)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 ()的實(shí)例化,不過_global.$clipboard是系統(tǒng)已經(jīng)有的了,所以可以直接用。

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

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

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

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

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

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

  注釋8:如果鼠標(biāo)沒有選定對(duì)象的話,只將paste添加到菜單中。

  注釋9:實(shí)例化一個(gè)對(duì)象myMenu,其中構(gòu)造函數(shù)調(diào)用了menuCallback函數(shù)。

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

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

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

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

  三、實(shí)際用途

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

  

相關(guān)頻道: eNews

您對(duì)本文或本站有任何意見,請(qǐng)?jiān)谙路教峤?,謝謝!

投稿信箱:tougao@enet16.com