簡體   English   中英

如何擴展Flash(AS3)舞台上已經准備就緒的Textfield?

[英]How to extend a Textfield that is allready on the stage in Flash (AS3)?

我正在尋找一種擴展TextField的方法,該方法已經在Flash(AS3)的舞台上實現,如下所示:

public class ChildTextField extends TextField 
{
    //code for childTextField comes here    
}

我在舞台上放置了一個實例名稱為“ thetextfield”的TextField。 現在,我想告訴Flash,此文本字段的類型為ChildTextField。 因此,在我的文檔類中,我將該文本字段聲明為ChildTextField:

public class DocumentClass extends Sprite()
{
    public var thetextfield : ChildTextField;
}

這將引發類型強制失敗錯誤。 是否可以像使用庫符號一樣更改Flash IDE中用於文本字段的類?

不怕。 如果要添加擴展的文本字段類,則必須使用ActionScript。

編輯:有一種破解方法。 來源: http : //board.flashkit.com/board/archive/index.php/t-738887.html

實際上,我之前遇到過這個確切的問題。 就我而言,我試圖創建一個具有額外行為的文本字段,以供其他一些非編碼藝術家使用。 我將告訴您我的原始解決方案全是as3,但是有一個致命的缺陷,而我當前的解決方案是as3和jsfl的組合。

所有的as3解決方案都很棒,除了兩件事:第一,它發生在運行時而不是構建時。 這意味着有一小段真實的時間,電影沒有正確初始化。 其次,如果電影中有多個幀,則播放效果不好。 基本思想是檢測要更改的TextField,構建要替換的TextField,然后在舞台上替換它們。 您可以通過擴展TextField或構建包含TextField並處理其接口的類來實現此目的。 假設您正在做第一個。 向SmartTextField添加一個構造函數,該構造函數將復制您關心的所有字段:

public function SmartTextField(TextField tf)
{
this.text = tf.text; //continue with copy of anything relevant. 
}

主電影中的代碼具有檢測並替換要替換的TextField的代碼

 var toreplace:Array = findTextFields(); 
 var tf:TextField;
 var stf:SmartTextField; 
 var where:int;
 for (int i = 0; i < toreplace.length;i++)
 { tf = TextField(toreplace[i]);
   stf = new SmartTextField(tf); 
   where = getChildIndex(tf); 
    addChildAt(stf,where); 
    removeChild(tf); 
 }

除上述幾點外,此方法工作正常。

JSFL解決方案過於復雜,無法詳細介紹,但這是基礎知識。 有一個as3類,該類用所需的新行為包裝文本字段。 編寫一個jsfl腳本,該腳本遍歷所選項目,如果是文本字段,則將其轉換為具有新包裝器類的基類的符號。 這樣做的好處是,它可以在創作時發生,並且可以自動保留位置,實例名稱和其他內容。 它的缺點是jsfl有很多煩人的怪癖要解決。

編輯:當然,如果這僅用於單個電影,則可以放棄jsfl轉換腳本,而只需手動完成即可。 轉換為符號->包裝器基類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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