2012-02-04 4 views
0

저는 잠시 동안이 문제를 해결하려고 노력하고 있습니다. dispatchEvent 등의 다양한 아이디어가 나타나지만이를 수행하는 명확하고 간단한 방법 인 것 같습니다.Flash AS3에서 별도 클래스의 클래스에서 함수 호출

내가 뭘하려는 건 내 문서 클래스와는 별도의 (그러나 같은 폴더에있는) 클래스에서 함수를 호출하는 것입니다. 특히, 객체를 '스폰 (spawn)'하고 Main.as에서 해당 객체의 클래스 내에서 함수를 실행하려고합니다. 내가 가진 순간의 예가 다음과 같습니다. Main.as에서

:

var object:class_Object = new class_Object(); 
object.spawn(); 
addChild(object); 

스폰 기능 class_Object 내 공공 기능입니다하지만 난 시도하고이 프로그램을 실행할 때, 나는 오류 얻을 : : '오류 # 1006 산란는 함수가 아닙니다' 내가 'object.spawn();'을 꺼내면 코드를 잘 개체를 추가합니다.

내가 뭔가를 분명 실종해야하지만

감사

편집을 알아낼 수 없습니다

문제는, 나는의 클래스 경로를 지정 잊고 있었던 고정 내 라이브러리 객체의 AS 연결로, 그렇게했다고 생각했습니다!

답변

4

해당 방법을 static으로 표시했습니다. 즉, 해당 클래스의 클래스 자체가 인스턴스에 속하지 않음을 의미합니다.

class_Object.spawn()

그러나이 의도 한 내용이 아 R 수도 있습니다,하지만 구현을 보지 않고 말을하기는 어렵습니다 : 당신이 말을 정의

는 메소드를 호출합니다. static 키워드를 정의에서 제거하면 인스턴스에 첨부되며 설명 된 방식으로 액세스 할 수 있습니다.

주제에 대한 Adobe 문서는 here을 참조하십시오.


귀하의 의견에 답변하기 위해, 그것에 대해 생각하는 간단한 방법은 "클래스"가 "인스턴스"를 만드는 청사진입니다.

그래서 "청사진"에게 청사진의 새로운 인스턴스를 "건설"한다고 말하면 new class_Object()라고 말하면됩니다. 측면에서 청사진을 사용하면 인스턴스 (또는 인스턴스 메서드)에서 사용할 수있는 메서드/속성을 정의 할 수 있습니다. 또한 "청사진"자체 (또는 정적 메서드)에서 사용할 수있는 메서드/속성을 정의 할 수도 있습니다.

그래서 예를 들어 그런 다음 Car

public class Car { 

    public function startEngine():void { 
     // This is an instance method, it will be available to 
     // any instance of a car, or new Car(); 

     // Note: "this" in this context refers to the current instance of the car 
     // that the method is being called from 
    } 

    public static function compare(Car car1, Car car2):bool { 
     // This method belongs to the blueprint of a car 

     // Note: "this" doesn't make any sense in this context, because we 
     // aren't talking about a particular instance. 
    } 
} 

의 고전적인 예를 사용 : 다른 클래스에서 "확장"하면

var mercedes:Car = new Car(); 
var bmw:Car = new Car(); 

mercedes.startEngine(); // call an instance method. notice we call it from a particular instance of a car. 
Car.compare(mercedes, bmw); // call an static method. notice we call it from the class of Car. 

, 당신은 "대출"다른 클래스의 기능이며, 자신의 기능을 추가/대체합니다. 하지만 인스턴스가있는 한 "공개"방법 인 경우 해당 인스턴스가 사용 가능한 곳에서 외부에서 사용할 수 있습니다. 그게 당신이 대답하는 데 도움이되는지 모르겠습니다.

+0

아 내가 볼 공공 당신의 class_Object 내부의 방법을 확인해야합니다. 그러나, 나는 어쨌든 정확하게 이해한다면, 그것들은 하나의 인스턴스가 아니라 두 개의 별도 클래스입니다. 따라서 MovieClip을 확장하는 Main 클래스와 Sprite를 확장하는 Object 클래스가 있습니다. Main 파일이 오브젝트 파일을 확장 한 경우에만 작동합니다. 도와 주셔서 감사합니다! – Artharos

+0

@Artharos 님이 내 답변을 업데이트하여 귀하의 의견을 피할 수 있도록 노력하겠습니다. –

+0

그건 분명 도움이되는데, 지금 수업을 더 잘 이해하게되어 감사합니다! 그러나 위와 같이 객체 클래스의 인스턴스를 호출하고 호출하고 있으므로 위와 같은 방법으로 호출하면 오류가 발생합니다. 나는 변수를 설정하고 Enter_Frame 함수 내에서 메소드를 호출하는 것이 중요하지 않다고 확신하지는 않습니다. 아, 그리고 내가 한 것처럼 정적 메서드를 호출하려고하면 오류가 발생합니다. '1061 : 정적 형식 클래스가있는 참조를 통해 가능한'정의되지 않은 메서드 '메서드'를 호출합니다. '대단히 고맙습니다! – Artharos

0

당신은 내가 클래스에 순수를 위해, 첨부 저를 지우기 위해, 덕분에 정적 몰랐어요,

package my.package{ 
    public class class_Object(){ 
     public function class_Object(){ 
      //constructor 
     } 

     public function spawn():void{ 
       //spawn code 
     } 

    } 
} 



var classObject:class_Object = new class_Object(); 
classObject.spawn(); 
관련 문제