2009-04-03 2 views
0

내가 AS3에서 이름 속성에 문제가 발생, 나는이 "점"무비 클립을 만든 내가 수업에 수출, 는 내가 익명으로 루프를 사용하여 점의 무리를 만들었습니다. 각 도트의 이름을 숫자로 지정했습니다.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"모두 추가, 나는 점 중 하나를 클릭하면, 그것은

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); 
    } 

e.target.name가 1 또는 2와 같은 숫자로 생각되는이 함수를 호출하지만 것 그것은 나에게 "instance66" "instance70"을주고, 나는 이유를 모른다. 전에 로더로 같은 일을했기 때문에 완전히 작동했습니다. 아이디어가 있으십니까? 감사.

크리스틴

답변

2

e.target은 가장 안쪽에있는 객체를 클릭하여 반환합니다.이 객체는 TextField, 다른 MovieClip 또는 "Dot"내부의 모양 (나는 마지막 객체의 100 %가 아님) 일 수 있습니다.

당신이에 false로의 mouseChildren 속성을 설정을 시도 할 수 있습니다이를 방지하려면 도트의 당신이 그 (것)들을 추가 할 때. 이렇게하면 점 내부의 아무 것도 클릭 이벤트를 보낼 수 없으므로 점에서해야합니다.

아마도 당신은 또한 이벤트 처리기에 다음과 같은 코드를 사용하여 대상 유형을 확인할 수있다 : 당신은 내가 당신에게 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

나는 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

를 반환해야합니다 그는 아직도 자신이 "을"e.target "변경하지 않는 한 동일한 문제 e.currentTarget있을 것입니다 "함수에서"callFullSub ". –

+0

아, 예, 인스턴스 이름을 설명합니다. 부모 이름이 아니라 자식 이름입니다. 그의 점은 무비 클립 또는 스프라이트의 구성입니다. 문제를 재현하려고 시도하면서 만든 두 응용 프로그램은 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. 

또한! 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

이 작동 할 수보십시오

d.name = i.toString(); 
관련 문제