| 月 | 日 | 年 | 時 | 分 |
24 /
Fri |
|
| 06 | 13 | 08 | 15 | 08 | 伍 |
| [三腳貓的]AS3筆記-之AS3一玄:Error 1119 |
加上[三腳貓的]幾個字,就是要與大師級馬克林的筆記分開,司入門常會遇到的問題。在與AS3 Fight!的過程中,曾經為了
1119: Access of possibly undefined property some through a reference with static type flash.display:…
傷透腦筋。明明看起來都對為什麼就是一直被丟錯呢?
答案卻是出人意表的簡單(至少很出我意表啦) 。。。
這樣的錯誤通常是出現在想要以parent 或是用assign完整路徑去溝通deep nested的MovieClip的時候。比方說你寫了:
this.parent.parent.whatevernested.alpha=0.5;
這就等著被丟1119的錯了。但是為什麼呢??因為AS3相較於AS2更為嚴格一點,它可以判斷你的 this.parent.parent是DisplayObjectContainer 但就僅到DisplayObjectContainer為止,至於他是Sprite or MovieClip compiler並不知道,很不幸的DisplayObjectContainer這個class不是dynamic的class,但是我們的好朋友subclass MovieClip確是dynamic的class,所以我們得配合嚴格的老師,告訴他this.parent.parent不僅僅是DisplayObjectContainer,而且還是MovieClip。方法很簡單,寫法改成:
(this.parent.parent as MovieClip).whatevernested.alpha=0.5; //錯誤就會消失了。
以我自己用路徑指定的例子 就會變成
for (var j:Number = 0; j < t ; j++) {
var target:DisplayObject = outputHolder.getChildByName(“output” + (j+1));
var index:int = outputHolder.getChildIndex(target);
var xt:int=(outputHolder.getChildAt(index) as Sprite).getChildAt(0).x;}
試誤經驗,以上。
參考閱讀:
Why doesn’t the “parent” property work the same in ActionScript 3?
Introduction to the Display List


Marc 說:
別這麼說,大家都是 AS3 新手
不過如果你的東西有很多 parent,就代表你的東西很不oop,
一般來講,由上往下就一路點(dot”.”)下去就好了,不過有下往上,也就是ㄧ要在children執行parent的動作,盡量用 dispatchEvent會比較好,不過你這招也真是特別,說不定某些狀況可以派上用場 (capture phase)
MovieClip(this.parent.parent).whatevernested.alpha=.5 ;
我比較喜歡用正規的casting
不過displayContainer不也繼承了alpha, x, y…等等的屬性嗎? 只是不能亂加custom variables,其他的應該也可以設定吧.
pei 說:
嗯 我剛寫不久 幾乎沒有用到過parent,我當時遇到1119錯誤的時候是我用到上面寫的那行getchildat [意思倒過來但是差不多的意思] 股溝下來 查得了zeuslabs的那篇解說 才知道原來還不少人遇到這樣的問題
正規的 MovieClip(this.parent.parent).whatevernested.alpha=.5 ;
意思是一樣的 通常都是卡在不知道要cast 才會有1119的錯誤訊息 當時我看用as MovieClip來cast覺得很有趣 原來flash也可以這樣寫 好像Coldfusion的語法 還滿有親切感的
對了 能不能請你寫一篇dispatchEvent 的運用呢?
Marc 說:
迅速寫了一篇"無知萬萬用"希望你看得懂
不惑仔 說:
試試傳統用法 :p
this.parent.parent["whatevernested"].alpha=0.5;