2012-01-21 1 views
1

나는 10 년 가까이에 ActionScript를 작성 해왔다. 하지만 필자는 TextMate와 같은 별도의 텍스트 편집기를 사용하여 코드를 작성하고 Flash IDE를 사용하여 컴파일했습니다. 이번 주말 Flash Builder를 시험해 볼 것을 결정했습니다. 분명히 앞으로 나아갈 길이기 때문입니다.Flash Builder에서는 상속 된 메서드를 재정의 할 수 없습니다. 나는 당황 스럽다

어쨌든. 저는 OSX에서 Flash Builder 4.6을 사용하고 있습니다. - 오늘 아침에 설치되었지만 아직 준비가 안 됐습니다. - 간단한 "Actionscript Mobile App"을 만들었습니다. (직장의 현재 프로젝트는 모바일 에어 앱이므로 플래시 IDE).

package 
{ 
    import zakariya.layout.RootLayoutSprite; 

    public class DoesThisEvenWork extends RootLayoutSprite 
    { 
     public function DoesThisEvenWork() 
     { 
      super(); 

      trace("hello... what's my size: " + this.size); 
     } 
    } 

    override public function onLayoutUpdated():void 
    { 
     super.onLayoutUpdated(); 

    } 

    override public function onSizeChanged():void 
    { 
     super.onSizeChanged(); 
     trace('onSizeChanged..., new size: ' + this.size); 
    } 
} 

클래스 RootLayoutSprite는 LayoutSprite에서 파생 내가 쓴 크고 작은 프로젝트의 수십에서 사용한 레이아웃 관리 API의 일부입니다. onLayoutUpdated 및 onSizeChanged 메서드는 size 속성뿐 아니라 LayoutSprite에 정의됩니다. SWC로 컴파일되지 - -

package zakariya.layout 
{ 
    public class LayoutSprite extends Sprite { 

     /* 
      Called after this Sprite's size changes, before layout of children is executed 
     */ 
     public function onSizeChanged():void 
     {} 

     /* 
      Called after this Sprite's size changes, after layout of children is executed 
     */ 
     public function onLayoutUpdated():void 
     {} 


    } 
} 

zakariya.layout 코드는 지역의 repo에서 원시 코드 그리고 내가 추가 한 폴더 구조로 모두의 :

이 정의는 더 또는 덜처럼 보이는 프로젝트의 소스 경로에 추가합니다. Flash Builder는 RootLayoutSprite를 인식하므로 기본 클래스를 명확하게 인식합니다.

나는 다음 내가 받기를 구축하려고

:
1006: A super expression can be used only inside class instance methods. DoesThisEvenWork.as /DoesThisEvenWork/src line 17 Flex Problem 
1010: The override attribute may be used only on class property definitions. DoesThisEvenWork.as /DoesThisEvenWork/src line 15 Flex Problem 
1010: The override attribute may be used only on class property definitions. DoesThisEvenWork.as /DoesThisEvenWork/src line 21 Flex Problem 
1020: Method marked override must override another method. DoesThisEvenWork.as /DoesThisEvenWork/src line 15 Flex Problem 
1020: Method marked override must override another method. DoesThisEvenWork.as /DoesThisEvenWork/src line 21 Flex Problem 

그래서, 플래시 빌더 나 그 메소드를 오버라이드 (override) 할 수 없습니다. 'override'특성을 제거하면 Flash Builder는 해당 메서드가 기본 클래스에 정의되어 있다고 불평합니다. Facepalm.

이 간단한 코드는 Flash IDE에서 잘 작동합니다.

나는 솔직히 무슨 일이 일어나는지 모른다. 나는 플래시 빌더 설정에 속지 않았다. 저는 Flex 프로젝트를 작성하지 않았기 때문에 Flash Builder를 오랫동안 사용하지 않았습니다 ... 그리고 자유 시간에는 C++을 작성하므로 Flash Builder Eclipse 도구 체인에 대해 알지 못합니다.

내 생각에 플래시 IDE는 플래시 빌더보다 덜 엄격한 컴파일러를 가지고 있기 때문에 오랫동안 잘못된 생각을 해왔다.

도와주세요!

+1

정확하게 귀하의 질문은 무엇인가? 클래스 밖에서'override'를 사용할 수없는 이유는 무엇입니까? 아니면 Flash IDE에서 작동하지만 Flash Builder에서 작동하지 않는 이유는 무엇입니까? 이 스타일을 허용하거나 사용하는 것은 틀린 것 같습니다. – Kapep

답변

2

코드가 플래시 IDE에서 컴파일되지 않아야합니다. 구문 오류가 있습니다. 생성자 다음에 클래스 선언을 닫았습니다. 그 중괄호를 끝까지 움직이면 모든 것이 잘 작동합니다.

package 
{ 
    import zakariya.layout.RootLayoutSprite; 

    public class DoesThisEvenWork extends RootLayoutSprite 
    { 
        public function DoesThisEvenWork() 
        { 
            ... 
        } 
    } // <= your class ends here 

    // everything below is outside of the class! 

    override public function onLayoutUpdated():void 
    { 
     ...} 
} 
+0

글쎄, 그건 완전히 당황 스럽네. 고마워. – TomorrowPlusX

관련 문제