| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > Flash入门教程 > 文章正文 用户登录
Flash & Ajax
一个基于实例(向量
影片剪辑实例名的
浅谈AS的绘图功能
浅谈AS与物理运动
as2.0内置类创建实
整理AS实例应用教
AS教程-光环飞舞
实例解析Flash绘制
updateAfterEvent

翅膀:Flash MX 2004新特性实例学习之三           

翅膀:Flash MX 2004新特性实例学习之三

作者:翅膀 来源:PConline 更新:2004-12-19 17:36:38 错误报告 我要投稿

简介:
    实例三、Customizing Context Menu,反映了Flash MX 2004在编程方面的重大改进。

  实例三、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{ 
/* 注释;class的意思是定义一个类,extends是表示所定义的类的基类是Object。
这个涉及到编程的面向对象,可能比较难懂,可以把Object看成是所定义的类的父类,
父类具有的方法和属性,在子类中都是有的
*/
static var $contents:Object; /*注释;定义一个变量contents,类型为Object。Flash MX 2004中都是这样定义变量的。 在此处定义的变量,在整个类中都是可以用的。 */ static var $operation:String; //注释;定义一个变量operation,类型为String.
function ClipBoard() {} /*注释;这是类的构造函数,所谓的构造函数就是当实例化这个类的时候所调用的函数。 比如本类的实例化可以是这样的:ClipBoard cb = new ClipBoard(); */
static public function cut(obj) { //注释;定义一个cut函数,传入的参数是obj,它的调用范围是public,也即是任何类都可以调用. obj._alpha = 50; //注释;设置传入的obj的alpha属性为50. $contents = obj; //注释;设置注释2中所定义的变量的值为obj. $operation = "cut"; //注释;设置注释3所定义的变量的值为“cut”. } static public function copy(obj) { //注释;定义一个copy函数,传入的参数是obj,调用范围是public. $contents = obj; $operation = "copy"; } static public function paste() { //注释;定义一个paste函数,没有传入的参数,调用范围是public.
if ($operation == "cut") { //注释;判断所定义的operation的值是否为“cut”. $contents._x = _root._xmouse; //注释;设置contents的xy坐标为鼠标的xy坐标. $contents._y = _root._ymouse; $contents._alpha = 100; //注释;设置contents的alpha为100. $contents = undefined; //注释;利用完contents的值后,将contents的值重新设置为undefined. $operation = ""; //注释;将operation的值清空. } else if ($operation == "copy") { //注释;判断所定义的operation的值是否为“copy”. var newdepth = $contents._parent.getNextHighestDepth(); //注释;定义一个变量newdepth,设置它的值为类中所定义的contents的深度. var newname = $contents._name + newdepth; //注释;定义一个变量newname,设置它的值为contents的实例名加上所在的深度. $contents.duplicateMovieClip(newname, newdepth); //注释;复制一个Movie Clip,参数是newdepth和newname。这就实现了复制的功能. $contents._parent[newname]._x = _root._xmouse; //注释;设置所复制的Movie Clip的位置跟aplha. $contents._parent[newname]._y = _root._ymouse; $contents._alpha = 100; $contents._parent[newname]._alpha = 100; } else { return; //注释;如果operation不是“cut”也不是“copy”的话,直接返回. } } public function isEmpty():Boolean { //注释;定义一个函数isEmpty(),返回的类型为Boolean,调用的范围为public if ($contents != undefined) { //注释;根据contents的值做相应的操作. return false; } else { return true; } } public function handleMenuCommand(obj, item):Void { //注释;定义一个函数handleMenuCommand,返回为空,调用范围是public. switch (item.caption) { /*注释;根据参数item的caption来做相应的操作,switch的功能跟多个 if判断差不多,但switch适用在判断的条件可能很多的情况下. */ case "Cut object": //注释;如果caption的值是“Cut object”,调用cut (obj)函数. cut(obj); break; case "Copy object": //注释;如果caption的值是“Copy object”,调用copy (obj)函数. copy(obj); break; case "Paste object": //注释;如果caption的值是“Paste object”,调用paste(obj)函数. paste(); break; } } }

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

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

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

on (release) { 
//注释;当松开鼠标的时候,停止拖动对象.
stopDrag();
}
on (press) { //注释;当按下鼠标的时候,开始拖动对象,并将对象设置在最前面一层.
startDrag(this);
mx.behaviors.DepthControl.bringToFront(this);
}

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

/* 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(); 
//注释;这里就是刚刚所定义的ClipBoard ()的实例化,不过_global.
$clipboard是系统已经有的了,所以可以直接用
function menuCallback (obj, menuObj) { //注释;定义一个函数menuCallback,在创建菜单的时候用. var empty:Boolean = _global.$clipboard.isEmpty(); //注释;定义一个Boolean 类型的变量empty,它的值是调用函数 _global.$clipboard.isEmpty()后所返回的值. menuObj.customItems = []; //注释;将menuObj的customItems设置为空数组. if ((obj instanceof MovieClip) && (obj != _level0)) { //注释;判断obj所具有的属性. menuObj.customItems.push(cutItem); //注释;将“cut”和“copy”添加到菜单中. menuObj.customItems.push(copyItem); if (!empty) { //注释;如果empty为假的话(也就是已经有cut或copy操作),将paste添加到菜单中. menuObj.customItems.push(pasteItem); } } else if (obj == _level0 && !empty) { //注释;如果鼠标没有选定对象的话,只将paste添加到菜单中. menuObj.customItems.push(pasteItem); } } var myMenu = new ContextMenu(menuCallback); //注释;实例化一个对象myMenu,其中构造函数调用了menuCallback函数. var cutItem = new ContextMenuItem("Cut object", _global.$clipboard.handleMenuCommand); //注释;实例化一个对象cutItem,这是一个子菜单,显示的内容为“Cut object”. var copyItem = new ContextMenuItem("Copy object", _global.$clipboard.handleMenuCommand); //注释;实例化一个对象copyItem,这是一个子菜单,显示的内容为“Copy object”. var pasteItem = new ContextMenuItem("Paste object", _global.$clipboard.handleMenuCommand); //注释;实例化一个对象pasteItem,这是一个子菜单,显示的内容为“Paste object”. ;MovieClip.prototype.menu = myMenu; //注释;将所定义的myMenu赋给系统.

  三、实际用途

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

文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。