0

クラスのさまざまなインスタンスにMovieClipsをアタッチする際に問題が発生します。私はActionScript3に少し慣れていないので、正直なところ、この質問は少しわかりにくいかもしれません。私は調査をしましたが、私が期待したような答えは見つかりませんでした。

function AddNewElement(clip:MovieClip, array:Array, name:String, firstValue:int, secondValue:int):Element

ご想像のとおり、これはクラスのインスタンスを動的に作成して配列に追加するために作成した関数です。ただし、最初のパラメーターに問題があります。ライブラリからこの関数にMovieClipを渡すにはどうすればよいですか?

これに似た問題に対して、各MovieClipはそれ自体がクラスである必要があるという回答をたくさん見ましたが、私は40のMCが好きで、それらすべてをほぼ同じ目的で使用したいので、それが殺されると感じていますクラスの目的、本当に。

これにどのようにアプローチすればよいですか?

4

3 に答える 3

1

最初に、エクスポート中または後で「プロパティ」オプションから、リンケージセクションからライブラリシンボルに一意のクラス名を付ける必要があります。そこで[ActionScriptにエクスポート]オプションをオンにすると、この入力が表示されます。次に、ライブラリシンボルを(newキーワードを使用して)インスタンス化し、MovieClipにキャストして、この関数に渡す必要があります。それで

  • AddNewElement(new LibrarySymbolClass() as MovieClip,[],'etc',0,0);
  • AddNewElement(MovieClip(new LibrarySymbolClass()),[],'etc',0,0);

両方ともあなたがやりたいことをすることができます。

DisplayObjectただし、すべてのライブラリ要素がMovieClipクラスを拡張する必要があるわけではないため、の代わりに選択することをお勧めしますMovieClip。したがって、関数のより良いバージョンは

import flash.display.DisplayObject;

function AddNewElement(clip:DisplayObject, ...):* {
    // some code here
    return clip;
}
var clip:LibrarySymbolClass = AddNewElement(new LibrarySymbolClass() as DisplayObject,[],'etc',0,0);
trace(clip);

[object LibrarySymbolClass]戻り値の型でアスタリスクを使用すると、(この例のように)正しい型のオブジェクトを返すことができます。

于 2013-01-05T05:20:28.643 に答える
0

FlashでMovieClipを作成すると、特定のオプションが提供されます。これらのオプションの1つは、FlashがそのMovieClipのクラスを作成することです。そうは言っても、そのオプションを40のムービークリップすべてに適用する場合は、マスタームービークリップクラスのようなものを作成し、各ムービークリップクラスにマスタームービークリップクラスを拡張させます。唯一のことは、40のムービークリップごとに.asファイルを作成extends MasterMovieClipし、クラス宣言に追加する必要があるということです。例えば:

public class MasterMovieClip extends MovieClip {
    // All of the variables and methods pertaining to each movie clip go here
}


そうすると、個々のムービークリップはこのクラスに似たものになります。

public class IndividualMovieClip_1 extends MasterMovieClip {
    // Just include a constructor, even though you don't have to
}


これで、メソッドと変数がプライベートではなくパブリックである限り、個々のムービークリップはすべて同じメソッドと変数になります。

このメソッドでは、40のクラスすべてを作成する必要がありますが、新しいムービークリップを作成するときに、Flashでムービークリップが拡張するクラスを設定する方法があり、40の異なるクラスを作成する必要はありません。



アップデート:

私はあなたの質問を読み直し、何か他のことを考えました。最初の文で話したそのオプションは、クラスを作成するオプションを提供するFlashに関するものです。クラスが指定されていない場合、Flashは実行時に動的にクラスを作成します。クラスを動的に作成する場合、ライブラリのムービークリップと同じ名前を維持しないと思います。そのため、ムービークリップの静的な名前を関数に渡そうとすると、何について話しているのかわからず、ランタイムがスローされます。エラー。

于 2013-01-05T03:37:25.393 に答える
0

実行時にムービークリップを作成しないのはなぜですか。実行時実行コンテキストでそれらを作成し、クラスを呼び出した瞬間にそれぞれをインスタンス化します。各MCが異なる場合は、それぞれにMCクラスを作成し、名前を昇順で指定してから、forループを使用して次のように配列に配置します。

var mc_num:int = 40 // the number of MovieClips
var arr:Array = new Array();

for (var i:int=0; i < mc_num; i++) {
    arr.push("myMovieClip" + String(i)); 
}

..次に、配列インデックスを使用してそれらのそれぞれを参照します。画像をMovieClipsに関連付ける部分はスキップします。

その後、次のように目的のMCを呼び出します。

var mc_1:MovieClip = arr[1] as MovieClip;
stage.addChild(mc_1);
于 2013-01-05T03:45:54.977 に答える