既にFlash(AS3)のステージにあるテキストフィールドを拡張する方法は?
-
06-07-2019 - |
質問
Flash(AS3)のステージで既に用意されているTextFieldを拡張する方法を探しています。 このようなもの:
public class ChildTextField extends TextField
{
//code for childTextField comes here
}
ステージ上にインスタンス名「thetextfield」のTextFieldを配置しました。次に、このテキストフィールドが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ソリューションは、 2つのこと:最初に、 ビルド時ではなくランタイム。それ 小さいが実際の部分があることを意味します 映画のない時間の 正しく初期化されました。第二に、それは 複数ある場合はうまくプレイできません 映画のフレーム。基本的な考え方は あなたがしたいTextFieldsを検出する 変更し、それらを置き換えるものを構築する で、ステージでそれらを交換します。君は これを行うには TextField、またはクラスを構築する TextFieldを含み、 それへのインターフェース。あなたがいるとしましょう 最初にします。にコンストラクタを追加します すべてをコピーするSmartTextField 関心のあるフィールド:
public function SmartTextField(TextField tf)
{
this.text = tf.text; //continue with copy of anything relevant.
}
メインムービーには、 TextFieldsを検出して置換します 置き換えたい
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コンバータースクリプト 手で。シンボルに変換-&gt;ラッパー ベースクラス。