作者ayuiop ((茶))
看板Flash
標題[問題] 引入的類別之事件的處理
時間Fri Aug 29 02:48:29 2008
例如說 我現在引入類別 C
File: C.as
package{
public class C{
public var v = 0;
public function C(){
...
this.an_obj_in_C.addEventListener(Event.Trigger, f() );
}
private function f(){
this.v = 1;
}
}
}
而 我在主程式test.fla中寫道
var c:C = new C()
trace(c.v);
然後很快地 c.v因為事件在下指令後還未被觸發 因此trace到的值都會是0
請問 如果我想要等到事件被觸發後才去存取c.v的值
除了目前我想到的方法 就是去修改C類別的定義 把addEventListener的工作拔出來
放到test.fla
也就是把這些加到主程式中
c.an_obj_in_C.addEventListener(Event.Trigger, f());
function f(){ c.v = 1; }
但是 還有什麼方法可以不必動到太多類別的定義 也達到相同目的呢?
另外一個問題 如果我想在引入的類別的函式中
使用主程式的變數(呃 大概就是指MainTimeLine下的變數吧)
要怎麼寫呢?
我有試過例如 trace(this.parent) 可是會顯示undefined
還是說 這兩個妄想 可能根本就違反了物件導向設計的原則呢?XD
謝謝各位m(__"__)m
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 221.169.194.146
1F:推 cjcat2266:是addEventListener(Event.Trigger, f); 08/29 10:33
2F:→ cjcat2266:還有其時我看不太出來你想要達到的目的耶 08/29 10:34
3F:→ cjcat2266:你想要這麼做,是想要有什麼具體上的應用嗎? 08/29 10:35
4F:→ cjcat2266:至於為什麼你this.parent會是undefined 08/29 10:37
5F:→ cjcat2266:因為你這個class沒有繼承DisplayObject 08/29 10:37
6F:→ cjcat2266:沒有parent這個property,而且沒有被addChild 08/29 10:38
7F:→ cjcat2266:所以不管怎麼做,他都沒有所謂的parent 08/29 10:38
8F:推 cjcat2266:然後就是,你這樣並沒有違反OOP的原則 08/29 10:40
9F:→ cjcat2266:只是...沒有用到OOP的概念 08/29 10:41
10F:→ ayuiop:我遇到的問題是 類別C內已經定義了obj的事件處理函式,如果 08/29 12:47
11F:→ ayuiop:外面的主程式new個C出來時 希望立即能使用經由事件處理函式 08/29 12:48
12F:→ ayuiop:存取的c.v值 但是主程式new完後不會等事件被觸發後才執行 08/29 12:49
13F:→ ayuiop:下一行,而是會在事件未觸發 事件處理函式未運作前就存取 08/29 12:50
14F:→ ayuiop:c.v的值 導致錯誤。 我想問的是 是否我只能選擇將事件處 08/29 12:52
15F:→ ayuiop:理函式拔出來寫在主程式中 如此主程式就可以寫到new完C後就 08/29 12:52
16F:→ ayuiop:結束,並將後續所希望進行的主程式過程全部再放到事件處理 08/29 12:54
17F:→ ayuiop:函式中? 也因為該函式是寫在主程式中 才能使用一些主程式 08/29 12:56
18F:→ ayuiop:定義的全域變數 08/29 12:56
19F:→ ayuiop:不知道這樣是否比較清楚@@ 我可以再把我的code PO上來 08/29 12:57
20F:推 cjcat2266:話說,不是沒有Event.Trigger這個東西嗎? 08/29 22:22
21F:→ cjcat2266:你想要用什麼樣的事件呢? 08/29 22:22