2012-11-23 2 views
1

사용자 정의 클래스 인스턴스를 타임 라인에 정의 된 변수에 액세스하는 방법을 이해하도록 도와주십시오.AS3 타임 라인에서 변수에 액세스하도록 맞춤 클래스 인스턴스를 가져 오는 방법은 무엇입니까?

이 프로그램은 여러 단계의 메모리 실험이 될 것이므로 타임 라인을 사용하는 것이 가장 적합합니다. (FWIW, 나는 XML을 사용하지 않고 가능한 한 간단하게 유지하려고 노력하고 있습니다.) 지금은 방금 한 프레임짜리 FLA를 만들어 어휘 테스트를하려고합니다. VocabQ라는 사용자 정의 클래스를 작성했습니다.이 클래스에는 VocabButton이라는 사용자 정의 클래스의 인스턴스가 4 개 포함되어 있습니다. 바로 지금 버튼 중 하나를 클릭하면 버튼 레이블이 추적됩니다. 그러나 타임 라인에 선언 된 String 변수 CurrentResponse의 값도 업데이트하려고합니다. VocabButton 클래스에서 CurrentResponse를 참조하려고하면 "1120 : 정의되지 않은 속성에 액세스 ..."오류가 발생합니다.

나는 인터넷을 통해 발견 한 토론을 바탕으로 다양한 접근법을 시도했지만 아직 성공하지 못했고 혼란스러워지고 있습니다. 도와주세요! (간단한 솔루션은 존재한다면 크게 감사 할 것입니다!) 아래 코드를보십시오. 는

코드를 타임 라인에 ~, 제이슨 감사합니다 :

import VocabQ; 
import flash.display.*; 
stop(); 

var CurrentResponse:String="NA"; 

var VocabQuestion = new VocabQ("VocabWord",["answerA","answerB","answerC","answerD"]); 
addChild(VocabQuestion); 

VocabQ.as 코드 :

package 
{ 
    import flash.display.*; 
    import flash.events.*; 
    import flash.net.*; 
    import flash.text.*; 
    import VocabButton; 

    public class VocabQ extends MovieClip{ 
     private var _VocabWordText:String; 
     private var _VocabWord:TextField; 
     private var _ResponseOptions:Array; 

     public function VocabQ(VocabWordText:String,ResponseOptions:Array){   
     _VocabWordText=VocabWordText; 
     _ResponseOptions=ResponseOptions; 
     build(); 
     } 

     private function build():void{   
      _VocabWord = new TextField(); 
      _VocabWord.text=_VocabWordText; 
      _VocabWord.x=25; 
      _VocabWord.y=25; 
      _VocabWord.textColor = 0x000000; 
      addChild(_VocabWord); 

      for (var i:int; i < _ResponseOptions.length; i++){ 
       var _VocabButton:VocabButton = new VocabButton(_ResponseOptions[i]); 
       _VocabButton.x = 25 + (_VocabWord.width) + 10 + ((_VocabButton.width + 2) * i); 
       _VocabButton.y = 25; 
       addChild(_VocabButton); 
       } 
      }  
    } 
} 

VocabButton.as 코드 :

package 
{ 
    import flash.display.*; 
    import flash.text.*; 
    import flash.events.*; 

    public class VocabButton extends MovieClip{ 
     private var _btnLabel:TextField; 

     public function VocabButton(labl:String){ 

      _btnLabel = new TextField();  
      _btnLabel.textColor = 0x000000; 
      _btnLabel.text = labl; 
      _btnLabel.border=true; 
      _btnLabel.borderColor=0x000000; 
      _btnLabel.background=true; 
      _btnLabel.backgroundColor= 0xDAF4F0; 
      _btnLabel.mouseEnabled = false; 
      _btnLabel.selectable=false; 
      _btnLabel.width=100; 
      _btnLabel.height=18;   
      buttonMode=true; 
      useHandCursor=true; 
      addEventListener(MouseEvent.CLICK,onClick,false,0,true); 

      addChild(_btnLabel); 
     } 

     private function onClick(evt:MouseEvent):void{ 
     trace(_btnLabel.text); 
     //CurrentResponse=_btnLabel.text; //causes error 1120: Access of undefined property... 
     } 
    } 
} 
+1

SO, Jason에 오신 것을 환영합니다. 초보자에게 좋은 질문입니다. 지금 http://stackoverflow.com/faq를 보시길 바랍니다. – JcFx

답변

0

이 작동합니다 :

당신이 경우 개인적으로 http://www.actionscript.org/forums/showthread.php3?t=161188

, 오히려이 같은 타임 라인에 액세스하는 것보다, 내가, 타임 라인에 VocabQuestion에 클릭 리스너 를 추가하는 것을 선호하고 Event to Bubble Up을 허용하거나 것 :

여기 토론보기 는 클래스 내에서 수많은 버튼을 사용하여 EventDispatcher을 확장하고 마찬가지로 타임 라인에서 처리 할 수있는 맞춤 이벤트를 만들지 만 간단한 테스트에서는 root 속성에 액세스하면 충분합니다.

+0

Yesss! 고맙습니다. 너는 아마도 나를 구해줬을 것이다. –

관련 문제