1

本当に不思議です。MovieClip クラス Apple を作成し、「apple」という名前の新しいインスタンスを作成する関数を作成しました。新しいインスタンスが配列「りんご」にプッシュされるたびに。関数を 5 回呼び出すと、5 個のリンゴが得られます。それらをapples[0]と呼ぶことで操作できます。配列をトレースすると、5 つの [object Apple] が表示されます。AS3 オブジェクトの構造をよく理解していないのかもしれませんが、各オブジェクトに名前を付けるべきではありませんか?

apple.name を設定して 5 つの異なる名前の配列を取得すると、apple1.x = 10のような名前でオブジェクトを操作できません。それぞれが独自の座標を持っている場合、コンピューターはどのリンゴがどこにあるかをどのように知るのですか? それらを呼び出す唯一の方法は: apples[0]-apples[4]? そして、すべてのリンゴで同じコードを作成する場合、関数を「これ」にどのようにアドレス指定すればよいでしょうか? クラスコードを書くとき、まだ名前がありません...

たとえば、Apple クラスをドラッグ可能な画像 (MovieClip) にしたい場合、100 万個までの任意の数のリンゴを作成すると、おそらくapples[0].addEventListener、apples[1].addEventListenerを追加できません... apples[1000000].addEventListenerをコードに追加します。グローバルにするにはどうすればよいですか?

特定のインスタンスを直接コーディングしているときに原因を尋ねています。名前があり、何に対処しているのかを正確に知っています。そして、クラスを操作して多くのオブジェクトを作成することは、ちょっとわかりません... 申し訳ありませんが、私は緑です

4

2 に答える 2

4

インスタンスにアクセスして操作できるようにするために名前は必要ありません。

次のようなことができます。

var apples:Array = new Array();

for (var i:int = 0; i < 100; i++)
{
    var apple:Apple = new Apple();
    apples.push(apple);
    apple.x = Math.random() * 500;
    apple.y = Math.random() * 500;
    addChild(apple);
    apple.addEventListener(MouseEvent.CLICK, onAppleClick);

}

function onAppleClick(e:MouseEvent):void
{
    var ind:int = apples.indexOf(e.currentTarget);
    var apple:Apple = apples[ind];
    trace(ind);
    apples[ind].visible = false;
    //or 
    //apple.visible = false;
}
于 2013-02-19T13:52:10.477 に答える
3

同じ問題ですね。:)

たとえばApple extends Sprite、プロパティを継承しますname

公開されているため、名前を変更できます。

var apple:Apple = new Apple() ;
apple.name = "MegaApple" ;

また、リンゴをステージに追加すると、名前で入手できます。

stage.addChild(apple) ;

リンゴを取り戻す:

var oldApple:Apple = stage.getChildByName("MegaApple") ;

MegaApple.move()しかし、それはあなたがそのようにリンゴを使うことができるという意味では決してありません:

もちろん、手動でたくさんのリンゴを作成できます。

var apple1 = new Apple() ;
var apple2 = new Apple() ;
var apple3 = new Apple() ;

しかし、それらがすべて同じように振る舞う場合は、何の意味もありません。そのため、それらを配列に格納します。

私の言いたいことを理解していただければ幸いです。

于 2013-02-19T13:40:39.523 に答える