2014-11-24 9 views
0

이 주제에 관해 온라인으로 많은 혼란이 있으며 혼란 스럽습니다.하위 클래스의 문서 클래스에서 변수에 액세스

Main.as의 변수를 다른 클래스에서 변경하려고 할 때마다 실패합니다. 더 나쁜 것은 무엇입니까? 과거 as3에서이 작업을 수행 한 것을 기억합니다. 사물의

public var mainVar:String = "CHANGE ME"; //on Main.as 

유형 I 시도 :

MovieClip(root).mainVar = "changed"; //error #1009 
parent.mainVar = "changed"; //error #1119 
this.parent.mainVar = "changed"; //error #1119 
Main..mainVar = "changed"; //error #1119 

내가 함수를 호출하고 동일한 언어를 사용하여 유사한 결과를 얻을하려고합니다.

도움을 받으려는 사람에게 미리 감사드립니다.

클래스에 함수를 저장하고 호출 된 main.as vars에서 작동하도록하는 것이 가장 좋은 생각 인 것처럼 보였지만 신뢰할 수있는 방법을 찾지 못했습니다. , 결국 아이들을 추가하고 이벤트 리스너를 동적으로 설정하며 main.as의 vars로만 작업합니다. main.as에서 클래스에 저장된 var를 변경하는 것이 쉽습니다.

+0

당신은 할 수는 정적, 공공 정적 var mainVar : String = "CHANGE ME"; 그런 다음 Main.mainVar = "changed"를 사용하십시오. – Karmacon

+0

컴파일러가 어떤 종류의 객체인지 알 수 있도록 제대로 캐스팅해야합니다. 'MovieClip' (당신이 현재 캐스팅하는 루트에)에는 그 속성이 없습니다. 하지만'Main (root) .mainVar'가 작동해야합니다. – BadFeelingAboutThis

+0

정적으로 변경하면 효과가 있습니다. 감사. – randyHurd

답변

0

"문제"는 AS3이 OOP이므로 클래스가 별도로 작동하고 연결해야합니다. 더 큰 프로젝트를 다룰 때 루트를 사용하는 이것을하는 오래된 "방법"은 절대적으로 잘못되었습니다.

여러 가지 방법으로 클래스를 연결할 수 있습니다. 첫째, Main 클래스는 루트처럼 작동합니다 (Flash IDE의 Properties를 통해 기본 클래스로 정의 된 경우). 나는이 사용하지 않는 것이 좋습니다

MovieClip(parent).myFunction(); 

: 그래서 당신은 DisplayObject이 (addChild(); 사용) 메인 클래스, 당신은 훨씬 전에 같이 할 수있을 것입니다에에게 추가되는 클래스를 만드는 경우 그것에서 기능을 새로 만든 클래스에서 다음

var somethingCustom:MyClass = new MyClass(this); // inside Main.as 

을 변수로이 저장 및 호출 :

- 대신보다 안정적인 솔루션을 사용해야하는 클래스에 기본 클래스를 전달
var _root:DisplayObject; 
public function MyClass(root:DisplayObject) { // MyClass.as 
    _root = root; 
    _root.callPublicFunction(); 
} 

(이 그들이 작동해야 정상적인 방법이기 때문에 그렇게 말하는) 당신이 수업을 이해하는 데 도움이 수있는 많은 자료가 있습니다

How Actionscript 3 Classes Work

http://www.untoldentertainment.com/blog/2009/08/25/tutorial-understanding-classes-in-as3-part-1/

+0

이것은 나를 위해 작동하지 않았지만, 무슨 일이 일어나고 있는지 귀하의 링크를 조사 할 것입니다. 감사. – randyHurd

관련 문제