.as
タイムラインとは別にファイルでプログラミングすることも、それほど違いはありません。ドキュメント クラス (Actionscript 設定パネルにあります) を使用している場合、クラス固有のプログラミングの突然の変更に少し気が重くなるかもしれません。移行をよりスムーズにするために、現在のタイムライン コードを新しいcode.as
ファイルに (そのまま) ダンプし、タイムラインに次の行をドロップするだけです。
include "code.as";
これは、コードを効果的にコピー/貼り付けして実行するだけですが、適切なコードエディター ( Sublime Textなど) を使用できるようになりました。さらに、新しいクラスではないため、そこに記述するコードは、タイムラインと同じスコープを持ちます。
2)。関数は、作成された名前空間にのみアクセスできます (これがおそらく、ドキュメント クラスが「未定義のプロパティへのアクセス」エラーをスローしていた理由です)。関数の引数を使用して、いつでもオブジェクト (および拡張によりその名前空間) への参照を渡すことができます。
1)。最初の質問に答えるために、ムービークリップを作成し、好きなだけ深く、好きな順序でネストできます。重要なことは、そのオブジェクトに移動する方法を認識することです。たとえば、次のステージ階層を考えてみましょう。
root:MainTimeline ¬
0: PSD_one:MovieClip ¬
0: backgroundImage:Bitmap
1: button:Sprite
2: txt:TextField
1: PSD_two:MovieClip
2: PSD_three:MovieClip
タイムラインには 3 つのオブジェクトがあり、それぞれに 0 から始まるインデックスがあります。最初の PSD は、3 つの子要素を持つMovieClip DisplayObjectContainerで、それぞれにオブジェクトのアドレス指定に使用できる name プロパティがあります。Flash IDE では、これらの「インスタンス」にラベルを付けます。「ステージ インスタンスを自動的に宣言する」というラベルの付いた Actionscript 設定パネルで IDE が有効にした内部マジックにより、自動的に親オブジェクトのプロパティになります。

つまり、 のテキストを変更するには、 とtxt
書くことができますPSD_one.txt.text = "foo"
。この設定がないと、 のようなコンテナー メソッドを使用する必要があります。現在のスコープにはそれと呼ばれるプロパティがないため (つまり、暗黙的に) 、完全な呼び出しは機能しません。root
.
getChildByName("PSD_one")
.
getChildAt(2)
txt.text = "foo"
this.txt
3)。 gotoAndStop
タイムライン フレームを制御する MovieClip メソッドです。古いやり方から完全に脱却したいのなら、フレームの使用をやめるべきです。
これらの PSD を表示するには、2 つの方法があります。
方法 1:
Flash IDE を使用してステージ上で PSD をインスタンス化し、コード内で参照できる一意の名前をそれぞれに付けます。PSD_two.x = this.loaderInfo.width
上記のレイアウトを想定すると、次の「フレーム」に「移動」したいときに、各 PSD を画面外に移動し ( などで)、画面の中央にスワップすることができます。
方法 2:
慣れているように PSD をライブラリにインポートしましたが、インスタンス化はしません。代わりに、コードに直接ジャンプし、誰かがボタンh
をクリックして に移動するfl_ClickToGohome
と、関数がライブラリ オブジェクトを選択して手動でインスタンス化し、addChild()を使用してステージにペアレント化します。
function fl_ClickToGohome(e:MouseEvent):void {
var psd:PSD_one = new PSD_one();
addChild(psd);
}
この種のアプローチは、アセットの動的ロードを開始する場合に適しています。もちろん、既に作成されたPSD_one
クラスをライブラリに含めるのではなく、単純にURLLoader()またはLoader()を使用し、完全な PSD ではなく、圧縮された画像を保存する必要があります。
これが役立つことを願っています。私はあなたの質問に直接答えていないことを知っていますが、問題は特定のコードではなく、実装方法に起因する場合があります。
-乾杯
あなたの質問に答えるために...
1: オブジェクトへのパス
オブジェクトへのパスがわからない場合は、この関数を試してください。自分の作品で使っているものの縮小版です。
function listLayers(obj = null, indent:String = ""):void {
// If no object was provided, start with the MainTimeline
if (obj == null) { obj = root; }
for (var i:int = 0; i < obj.numChildren; i++) {
// Make a pointer to the object at this index
var item = obj.getChildAt(i);
// Get the item type
var type:String = flash.utils.getQualifiedClassName(item);
if (type.lastIndexOf("::") != -1) {type = type.split("::")[1];}
var msg:String = indent + i + ": " + item.name + ":" + type;
if (type != "TLFTextField" && item.hasOwnProperty("numChildren") && item.numChildren > 0) {
trace(msg + " ¬");
listLayers(item, indent + " ");
} else {
trace(msg);
}
}
}
これにより、ステージの構造が上で見たのとほぼ同じ形式 (PSD を使用) で出力されます。getChildByName
その後、ルートから子までを使用できます (ハード ドライブ上のフォルダーをナビゲートするのと同じように、フル パスを指定する必要があります)。
2: パブリック/プライベート名前空間
これらは専用クラスでのみ使用されます。前述の方法を使用している場合include
は、タイムライン コードと同様にこれらを省略します。これらは、クラスの「外部」からプロパティ/メソッドにアクセスできるかどうかを示します。始めたばかりの場合は、すべて公開のままにします。後で取り組む準備ができたら、メモリの最適化について心配することができます。
3: クラスはどのようにボタンにアクセスしますか?
DisplayList をフォルダー構造として考えるのが最も簡単な方法です。

あなたは書くかもしれません
C:/Users/Me
DisplayList のどちらがより似ているか
C.Users.Me
もちろん、 と呼ばれるルートの場所はありませんC
。オブジェクトはおそらく and と呼ばれPSD_one
てmyButton
いるため、次のように書き換えることができます...
root.PSD_one.myButton
これは、実際にオブジェクトにこれらのプロパティが事前に定義されていることを前提としていますが、これはオブジェクトを動的に作成する場合には発生しません。そのような場合、次のようにコマンドをつなぎ合わせます。
root.getChildByName("PSD_one").getChildByName("myButton")
クラスを作成することは、ネットワーク上に新しいコンピューターを作成するようなものです。そのクラスと MainTimeline の間に直接的な関係はありません。それらを接続する必要があります。
DisplayListObject (スプライトなど) をインスタンス化してステージに追加すると、オブジェクトはstage
、root
、 などのいくつかのプロパティを自動的に取得します。これらは、クラスが に接続してその上のオブジェクトにアクセスするために、クラスが内部から参照できるプロパティです。parent
null
MainTimeline
逆に、必要に応じて、次のように、ステージへの参照をコンストラクター引数からクラスに渡すことができます。
var foo:MySprite = new MySprite(stage);