2016-09-14 4 views
-1

캔버스 모드에서 실행중인 Animate에서 간단한 응용 프로그램을 개발하고 있습니다. 스테이지에 인스턴스 이름이 'p1', 'p2', ... ~ 'p19'인 무비 클립 버튼이 여러 개 있습니다. 버튼을 클릭하면 다른 무비 클립 'partOverlay'가 표시되고 해당 타임 라인의 프레임으로 이동합니다.Adobe Animate Javascript TypeError 미스터리 - 해결할 수 없습니다.

p1에서 p13까지만 아래 코드와 같이 코딩하면 모든 것이 잘 작동합니다. 그러나 p14는 TypeError를 제공합니다. this.p14는 정의되지 않았습니다. p13 이후에도 다른 인스턴스를 수행하십시오. 나는 트리플과 이름을 확인하고 모든 것이 괜찮아 보인다. p14 버튼과 코드를 새로운 Animate 문서로 복사하면 제대로 작동합니다.

저는 온라인 검색과 테스트에 몇 시간을 보냈습니다. 어떤 도움을 주셔서 감사합니다.

샘플 코드 :

this.p13.cursor = "pointer"; 
this.p13.addEventListener("click", GoToPartFrame2.bind(this, "p13")); 

this.p14.cursor = "pointer"; 
this.p14.addEventListener("click", GoToPartFrame2.bind(this, "p14")); 

function GoToPartFrame2(view) 
{ 
    this.partOverlay.gotoAndStop(view); 
    this.partOverlay.visible=true; 

} 

답변

0

난 그냥 뭔가 이상한 것을 발견했다. 모든 버튼은 복제 된 단일 버튼의 인스턴스이며 새 버튼을 만들기 위해 새 인스턴스 이름을 제공합니다. 세 개의 다른 타임 라인 키 프레임에 서로 다른 버튼 세트가 있었는데, 원래 버튼의 모든 사본이었습니다. TypeError가있는 버튼의 코드를 주석 처리하고 파일을 테스트했을 때 어떻게 든 그 버튼은 여전히 ​​리스너를 가지고 있었고 다른 키 프레임의 다른 버튼에서 함수를 작동 시켰습니다. 두 버튼 모두 고유 한 인스턴스 이름을 가졌습니다.

버튼의 내부 이름과 내가 지정한 인스턴스 이름 사이에 이름 충돌이 있다고 가정했습니다. Animate는 인스턴스 이름을 무시하고 다른 내부 객체 이름을 적용했습니다. 직감적으로 각 키 프레임에 대해 새로운 독창적 인 버튼을 만들었습니다. 즉, 각 키 프레임에는 해당 키 프레임의 고유 한 마스터 단추에서 복제 된 단추 집합이 있습니다. 이제 모든 것이 제대로 작동합니다. 이 방법으로 작동해야하는 어리 석고 직관력이없는 종류의 ... 프로그램은 복제 된 단추가 어떤 키 프레임에 있는지에 관계없이 개체의 기본 식별자로 적용되는 고유 한 인스턴스 이름을 고려해야합니다. 시간 낭비.

관련 문제