I Love China

技术·人生

技术服务生活
繁體
4月 27th, 2007

在代码提示中增加自己的类或者扩展MovieClip的方法和属性

[问题的提出]:Action面板中的代码提示可以提高我们键入代码的效率,但是默认的代码提示并不能完全满足要求,比如在编写代码时,我经常要用到通过prototype扩展了MovieClip的方法inputStr和clearStr来做数字输入,但是默认的MovieClip类的代码提示中显然是没有这两个方法的;还有就是经常用到的动态为MovieClip添加的属性_xx、_yy、_d等,我也希望它们能出现在代码提示中。另外一个是自己的写的类或者是含有属性、方法的常用Object对象等,都希望它能出现在代码提示中。

[问题分析]:

归纳问题描述,可以知道需要从两方面入手,一是如何为已有类增加一些提示,而是如何添加自定义类的代码提示。

[解决问题]:

1、第一个问题,其实默认类的代码提示都是用Xml文件保存的,我们只需要找到这个文件,做些修改就可以了。以FlashMX2004为例,在C:\Documents and Settings\当前用户\Local Settings\Application Data\Macromedia\Flash MX 2004\软件语言\Configuration\ActionsPanel目录下找到ActionsPanel.xml,用你喜欢的XML文件编辑软件(我用的是Macromedia Dreamweaver 8)打开它,我们知道attachMovie是MovieClip类的默认方法,所以我们搜索attachMovie,找到位置后,就可以在它后面添加我们的方法,比如我要添加inputStr和clearStr方法,就可以这样输入:

xml Code:
  1. <string name="inputStr" tiptext = "输入字符"  object="MovieClip" text = ".inputStr(% charStr:String, maxChar:Number,replaceFlag:Boolean %)" version="7"/>
  2. <string name="clearStr" tiptext = "清除字符"  object="MovieClip" text = ".clearStr(% clearAll:Boolean %)" version="7"/>

同样,先查找_x,然后添加我们的_xx、_yy、_d等,此处就不说了。

2、我们知道this关键字在代码中表示的意义不同,有时表示MovieClip有时表示声音对象,等等其他,所以Action中的代码提示并未给this指定如何提示代码,但是我经常用this表示MovieClip类,所以希望键入this.的时候能出现MovieClip类的相关信息。打开同一个目录下的AsCodeHints.xml,在里面添加

xml Code:
  1. <typeinfo pattern="this" object="MovieClip" />

即可。当然,你也可以添加你自己喜欢的提示。

3、关于自定义类的代码提示,Flash中提供了一个 CustomActions类用来在Flash开发工具中注册和卸载自定义类的代码提示,你可以看下这个介绍。不过我不愿意使用它,比较麻烦,还是直接往里面添加比较好。打开目录C:\Documents and Settings\当前用户\Local Settings\Application Data\Macromedia\Flash MX 2004\软件语言\Configuration\ActionsPanel\CustomActions,这个目录就是用来放自定义类的代码提示的,我想为自定义的SoundCtrl类添加代码提示,于是就创建一个名为SoundCtrl.xml的文件,里面的内容如下:

xml Code:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <customactions>
  3.  <actionspanel>
  4.   <folder version="7" id="SoundCtrl" index="true" name="SoundCtrl" tiptext="声音控制类"> 
  5.    <string version="7" id="showSound" name="showSound" tiptext="播放景声音" text=".showSound(% id:String 声音链接标识符,loop:Number=1 循环次数%)" object="SoundCtrl" />
  6.    <string version="7" id="setVolume" name="setVolume" tiptext="设置音量" text=".setVolume(% num:音量%)" object="MSTB" />
  7.    <string version="7" id="repeat" name="repeat" tiptext="重复声音" text=".repeat()" object="SoundCtrl" />
  8.    <string version="7" id="stopSound" name="stopSound" tiptext="停止声音" text=".stopSound()" object="SoundCtrl" />
  9.   </folder>
  10.  </actionspanel>
  11.  
  12.  <colorsyntax>
  13.   <identifier text=".showSound" />
  14.   <identifier text=".setVolume" />
  15.   <identifier text=".repeat" />
  16.   <identifier text=".stopSound" />
  17.  </colorsyntax>
  18.  
  19.  <codehints>
  20.   <typeinfo pattern="*_sdCtrl" object="SoundCtrl" />
  21.  </codehints>
  22. </customactions>

,这样在Action面板中只要输入任何以_sdCtrl结尾的名字,然后再键入.时就会出现这些提示了。

另:虽然这是添加自定义类代码提示的方法,其实就算不是类,依然可以这样添加,比如我经常写playObj的Object来控制播放暂停,它并未定义成一个class,它有play、pause、stop的方法,还有startLabel的属性,依然可以用为class添加代码提示的方法为它添加提示:

xml Code:
  1. <customactions>
  2.  <actionspanel>
  3.   <folder version="7" id="playObj" index="true" name="playObj" tiptext="播放暂停">
  4.    <string version="7" id="init" name="init" tiptext="初始化" object="playObj" text=".init(% targetMC:MovieClip,starFrameLabel:String,playFlag:Boolean %);\n" />
  5.    <string version="7" id="play" name="play" object="playObj" tiptext="播放" text=".play();\n" />
  6.    <string version="7" id="pause" name="pause" object="playObj" tiptext="暂停" text=".pause();\n" />
  7.    <string version="7" id="stop" name="stop" object="playObj" tiptext="停止" text=".stop();\n" />
  8.   </folder>
  9.  </actionspanel>
  10.  
  11.  
  12.  <colorsyntax>
  13.   <identifier text=".init" /></colorsyntax>
  14.   <identifier text=".play" /></colorsyntax>
  15.   <identifier text=".pause" /></colorsyntax>
  16.   <identifier text=".stop" /></colorsyntax>
  17.   <codehints><typeinfo pattern="playObj" object="playObj" />
  18.  </codehints>
  19. </customactions>

[小结]就写这些吧。另外需要注意的是编码格式要为utf-8.

随机文章:

Leave a Reply