I Love China

技术·人生

技术服务生活
繁體

Archive for the ‘Flash总结’ Category

[AS2组件]把使用组件的SWF加载到其他SWF中的问题

星期日, 10月 21st, 2007

AS2[问题描述]:a.swf文件中使用ComboBox组件做了下拉框,单独打开a.swf,下拉框正常,b.swf是个外框文件,现在要用b.swf把a.swf加载到b.swf里的一个MC里,结果a.swf中的下拉框不正常了,下拉框里的项是正常的,就是点击后打不开列表,经测试,ComboBox的open事件也触发了,但是就是不显示列表。

[探索]:查遍Flash帮助、Flash组件帮助也没找到答案。无奈,只好打开ComboBox.as文件,看代码,700多行代码可不好看。在打开组件源文件,把ComboBox的组件源MC拖到新文件t1.fla里,然后在ComboBox.as里查找open事件,会看到它调用的是displayDropdown函数,然后再找到这个函数定义的地方,一句句读,看到一句
AS Code

var dd = __dropdown;

,从字面意思猜,它就应该是那个下拉弹出框,所以在它后面添加一句
AS Code

trace("dd " + dd);

,重新导出t1.fla,看到了trace出的语句dd _level0.depthChild0,然后新建t2.fla,新建空元件load,把load拖到舞台上,使用load作为容器加载t1.swf,结果trace出来是dd null,显然问题就出在这里。
(阅读全文…)

[ActionScript]一直以来对_parent的误解

星期三, 8月 15th, 2007

[例子]:假设舞台上放置一个实例名为_mc的影片剪辑,在舞台时间轴上写如下代码:

ActionScript Code:
  1. _mc.onRelease = function ()
  2. {
  3.     trace (_parent);
  4. };

那么,当点击该影片剪辑时,输出的结果会是什么?是_level0吗?
一直以来,我都认为此处的_parent是指向_mc的上一级影片剪辑的,也就是说我认为此处_parentthis._parent是一样的作用。但是事实并非如此,你执行下最开始的那段代码就知道了,输出结果是undefined,而如果改成trace(this._parent)输出结果是_level0.
看下帮助中关于全局属性_parent的解释:
指定或返回一个引用,该引用指向包含当前影片剪辑或对象的影片剪辑或对象。
在相对路径中,使用关键字 this 指示当前层中的当前时间轴;使用别名 _parent 指示当前时间轴的父时间轴。
因此如果代码是写在帧上的时候,_parent指的是当前时间轴的父时间轴,而this._parent指的是this指向的对象或影片剪辑的父对象或影片简介。
另外,扯一点this,如果代码直接写到按钮上,this指的是包含该按钮的父级影片简介,如果写到影片剪辑上,this指向该影片剪辑,如果写到按钮或者影片剪辑的父级影片剪辑的帧上,this都指向该按钮或影片剪辑。

FlashCS3打包的exe存在的问题

星期四, 8月 2nd, 2007

FlashCS3打包的exe程序在中文支持问题上解决了放在中文路径下无法正常加载swf文件的问题.使用Flash8打包过exe文件的都会知道,当使用它通过loadMovieNum方法加载路径中有中文名的swf文件时是无法成功的,只有加上”/”才能成功。而FlashCS3打包的exe文件已经解决了这个问题,可谓一件好事!
但是,却有新问题发生,FlashCS3打包的exe程序使用fscommand(”exec”,”exe路径”)时存在问题!虽然成功的调用了外部exe文件,该exe程序却无法正常访问其他文件!经查该外部exe程序运行时路径为\\?\磁盘驱动器:\一些路径\.exe而不是正常的磁盘驱动器:\一些路径\.exe,因此该外部exe程序无法访问其他文件。

解决声音以数据流形式放到时间轴上导出后音质变差的问题

星期五, 7月 20th, 2007

[关键字]Flash 数据流 声音 音质变差 立体声转换成单声道
[问题描述]:将声音放到时间轴上,选择数据流的同步方式,在Flash中听声音没有发现问题,但是导出后音质变的奇差,基本上不能用,虽然将声音同步方式选择开始或者事件可以解决这个问题,但是有时是非要用数据流同步方式不可的(因为要用播放暂停控制,因为有进度条控制)。
[解决办法]:这是由于在导出时,Flash会以MP3的形式压缩声音,一般会把声音压缩成比特率低于22Kbps的声音,同时将立体声转换成了单声道声音,很多声音都是因为将立体声转换成单声道后音质变差的。因此我们要去掉次选项。
(阅读全文…)

判断两个数是否相等,并不是那么简单的

星期二, 5月 29th, 2007

在最近的面试中,我出了下面这样一道题目:
写一个比较两个数是否相等的函数。
这道题目简单吗?
很多人是这么写的

ActionScript Code:
  1. function isEqual (num1:Number, num2:Number):Boolean
  2. {
  3.     if (num1 == num2)
  4.     {
  5.         return true;
  6.     }
  7.     else
  8.     {
  9.         return false;
  10.     }
  11. }

(阅读全文…)

ActionScript2.0中侦听变量值的改变

星期六, 5月 19th, 2007

如果定义的某个变量在某个地方被改变了值,我们希望能知道发生了什么改变,并且想对这种改变做些处理,该如何实现呢?方法之一是使用watch方法。

ActionScript Code:
  1. var testVar:Number = 0;
  2. var limit:Number = 5
  3. var changeFun:Function = function(prop, oldVal, newVal, limitNum)
  4. {
  5.     if(newVal < limitNum)
  6.     {
  7.         newVal = limitNum
  8.     }
  9.     return newVal;
  10. }
  11. this.watch("testVar",changeFun,limit)
  12. testVar = 4;
  13. trace(testVar)

输出结果是

Output Code:
  1. 5
  2. 如果不想再侦听,就是用unwatch。