2009-04-03 9 views
0

as3のnameプロパティで問題が発生しました。このドットドットムービークリップを作成し、クラスにエクスポートしました。 その後、ループを使用して匿名でドットを作成しました。私は、各ドットこれまでのところは良い ActionScript 3 nameプロパティが正しい名前を返していません...?

private function callDots(num:Number):void 
    {     
     for (var i = 0; i < subImagesTotal[num]; i++) 
     { 
      var d:Dot = new Dot(); 
      d.x = i*23; 
      d.y = 0; 

      d.name = i; 
      dotContainer.addChild(d]); 
     } 
    } 

に名前と番号が割り当てられて、私はここに名前をトレースした場合、私は私がしたい番号を取得することを確認しました。 しかし、他の機能でそれをトレースすると、私に数字が与えられていません。 私は「dotContainer」に私のドットのすべてを追加し、私はドットのいずれかをクリックした場合、それはe.target.nameが1または2のような数字であることを仮定している

private function callFullSub(e:MouseEvent):void 
    { 
     var full_loader:Loader = new Loader(); 
     var temp:XMLList = subImages[sub]; 
     var full_url = temp[e.target.name][email protected]; 

     full_loader.load(new URLRequest(full_url)); 
     full_loader.contentLoaderInfo.addEventListener(Event.INIT, fullLoaded); 
    } 

この関数を呼び出しますが、それは私に "instance66" "instance70"と私に与えている 理由が分からない。以前はローダーで同じことをしていたので、それは完全に機能しました。 アイデアありがとう。

クリスティン

答えて

2

e.targetは、最も内側のオブジェクトをクリックして返します。これはTextField、別のMovieClip、または「ドット」内の形状(私は最後のものの100%ではありません)です。

これを防ぐには、Dotの追加時にmouseChildrenプロパティをfalseに設定します。これにより、ドット内の何もクリックイベントが送出されないようにする必要があります。したがって、ドットはそれを行う必要があります。

おそらく、あなたもイベントハンドラに次のようなコードを使用してターゲット・タイプを確認することができます:私はあなたにDEFINATEの答えを与えることができるようにするためにあなたがあなたのコードを十分に示していない

private function callFullSub(e:MouseEvent):void 
{ 
    if(!e.target is Dot) 
     throw new Error("target in callFullSub is not Dot but: " + e.target.toString()); 

    //The rest of you code here 
} 
1

私は、Flexは、ActionScript用にエクスポートドットムービークリップシンボルを使用して実行時に作成ムービークリップを使用して、Flashでで最初にあなたの問題を再現してみました。いずれのアプリケーションも問題を示さなかった。

「instance66」「instance70」などの名前は、既定の列挙されたインスタンス名です。だから、MouseEventをディスパッチしているものはドットインスタンスではありません。おそらくあなたは間違ったターゲット、おそらくあなたのコンテナにcallFullSubを意図せずに割り当てていますか?このように、あなたがそれらを作成した直後にインスタンスをドットに割り当てる試してみてください。

private function callDots(num:Number):void 
{     
    for (var i = 0; i < subImagesTotal[num]; i++) 
    { 
     var d:Dot = new Dot(); 
     d.x = i*23; 
     d.y = 0; 

     d.name = i; 
     d.addEventListener(MouseEvent.CLICK, callFullSub); 
     dotContainer.addChild(d]); 
    } 
} 

一時的に元の割り当てをコメントアウトしてください。

+0

..これはうまくいくかもしれない試してみてください"callFullSub"関数内にあります。 –

+0

ああ、はい、インスタンス名について説明しています。これは親の名前ではなく、子の名前です。彼のドットはムービークリップまたはスプライトのコンポジションです。この問題を再現しようとしたときに作成した2つのアプリケーションは、Dotはグラフィックのみを含む単純なMovieClipであると仮定していました。 –

0

、私は意志しかし、これを言う。

//After you create each loader you need to set its mouseEnabled 
//property to false if you do not want it to be the target of 
//Mouse Events, which may be superseding the actual intended target; 

var full_loader:Loader = new Loader(); 
full_loader.mouseEnabled = false; 
//Also you could name the loaders and see if what comes back when you click is the same. 

ALSO!これをマウスイベントハンドラにCLICKまたはMOUSE_DOWNのために追加してください:

trace(e.target is Loader); //If traces true you have an answer 

私は、マウスイベントがローダーによって送出されていると考えています。

コード、Loader.contentLoaderInfoのCOMPLETEハンドラが起動するコードをさらに提供してください。ここでは表示されていないローダーを表示リストに追加する場所を想定しています。

2

答えは[e.currentTarget.name]私はこれを常に実行します!

「Dot1」「Dot2」などを返す必要があります。あなたが戻りたい値が数値や文字列以外のデータ型(オブジェクトの名前)を使用の場合は

[e.currentTarget.name.substr(3,1).toString()]

1、2、などを返すべき

Navee

1

は、彼がe.currentTarget」に "e.target" を変更しない限り、彼はまだ同じ問題を抱えているだろう

d.name = i.toString(); 
関連する問題