[英]AS3/Flash: Why moving a symbol's class file from a top-level directory to a deeper directory break the link between symbol and class file?
::編輯::
這個問題有點籠統,所以我將其縮小以使其更加簡潔。
摘要:
當我在庫中有一個鏈接到MovieClip的類並且該類在其構造函數方法中接受一個參數時。 僅當該類位於我的頂級目錄(與.fla和Document.as文件相同的目錄)中時,該類才可以正確編譯。 如果我將該類移至更深的目錄(例如com.place),並適當地更新package語句和符號鏈接,則編譯器將生成錯誤“ 1136:參數數目不正確。預期為0”。
重新創建:
創建Flash項目,並在舞台上放置一個矩形。 將其隱藏為symbol並將其分配給TestPanel類-或您選擇的任何類。 還要配置fla,使其使用Document(Main)類。
在同一文件夾中創建Main.as和TestPanel.as。 在Main類中,實例化一個TestPanel實例並將其添加到階段。 可以預期,Flash將添加矩形符號,一切都很好。
現在修改TestPanel,以使其構造函數方法采用Number並將Main.as傳遞給TestPanel。
公共功能TestPanel(num:Number){trace('TestPanel已創建:num ='+ num); }
公共函數Main(){trace('Main已初始化'); var myTestPanel:TestPanel = new TestPanel(5); addChild(myTestPanel); }
現在將TestPanel移至com / place / TestPanel並更新package語句以反映其新位置。 還要更新庫中的矩形符號,以便它鏈接到com.place.TestPanel。
現在,您將收到錯誤:1136:參數數量不正確。 預期為0。
當我將TestPanel.as移至更深的目錄時,即使我將那個Symbol映射到com.place.TestPanel,Flash也會以某種方式在其他地方尋找Symbol的基類。
有人可以重新創建這個,並告訴我我要去哪里嗎?
(對不起,我沒有突出顯示本文中的代碼。我似乎無法使該編輯器正常工作)
我已將com.place.MO
添加到基類中(對我來說也適用於類)
並創建一個as文件
package com.place{
import flash.display.Sprite;
public class MO extends Sprite {
public function MO():void {
rotation = 45;
}
}
}
它位於com / place /目錄中,與fla文件位於同一目錄中。
這可行。 您可以分享課程或課程的重要部分嗎?
在AS文件的開頭進行更改:
package {
...
至
package com.place {
...
編輯:我轉載了步驟,一切都很好。 確保FlashIDE找到您的班級(通過單擊路徑旁邊的綠色對勾)。 還要仔細檢查一下,您沒有其他任何具有相同名稱的符號將其弄亂(愚蠢但常見)。
舊答案:
通過在庫中包含定義並將它們鏈接到腳本,這一切都令人困惑。
如果使用純ActionScript進行編碼,則如果擴展一個需要構造函數參數的類而不從擴展類中調用“ super(*arguments*)
”,則會出現相同的錯誤消息。 這個問題非常明顯,因為所有繼承的構造函數都需要在對象的實例化時調用,因此任何缺少的參數都將使這種情況無法發生。
將工作 :
不管用 :
現在,我想如果您向庫中的Symbol添加一個類定義,則可以通過將其拖動到Flash IDE中的階段而不定義其構造函數的參數來隱式地實例化此符號(即使您明確不這樣做)。 因此,從理論上講,這將導致與前面所述相同的結果,並拋出“ 1203:在基類中找不到默認構造函數”
嘗試以下操作 :在基類中,向構造函數中的所有參數添加默認值(例如, name:String = 'me', age:int = 99
)。 這將允許您擴展類(通過從庫中進行子類化)而無需傳遞任何參數。 希望這將有助於編譯器允許您進行編譯。
萬一您真的想強制傳遞參數,我建議您通過實例化Flash IDE庫中定義的Symbol並將其添加到TextPanel類中來實現此目的。
希望它有所幫助; )
我意識到哪里出了錯。
首先,感謝大家的投入。
發生的事情是我的符號鏈接到“基礎類”字段中的班級,而不是“類”字段。 我不確切地知道我何時開始養成這種習慣,但我一直都在做,顯然沒關系,因為直到現在我的類都沒有在其構造函數中使用參數。 這也解釋了為什么它在頂層目錄中起作用,而不是嵌套在com / place / whatever中時起作用。
對於偶然發現相同/相似問題的任何人,請記住檢查以查看您的符號鏈接到“類”字段而不是“基礎類”字段中的類。
這是有關該主題的Adobe文檔的鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.