簡體   English   中英

AS3 / Flash:為什么將符號的類文件從頂層目錄移動到更深的目錄會中斷符號和類文件之間的鏈接?

[英]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*) ”,則會出現相同的錯誤消息。 這個問題非常明顯,因為所有繼承的構造函數都需要在對象的實例化時調用,因此任何缺少的參數都將使這種情況無法發生。


將工作 :

  • 類Citroen()-> super(4)->擴展類Car(wheels:int)-> 4個輪子
  • Citroen()類->擴展Car(wheels:int = 2)類->未指定至少2個輪子
  • 類Citroen(wheels:int)-> super(wheels)->擴展class Car(wheels:int)->實例化時要指定的輪子數

不管用 :

  • 沃爾沃類() - >擴展類汽車(輪:INT) - >沒有輪子 :P

現在,我想如果您向庫中的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM