기존 프로젝트를 Flash 7/AS2에서 Flex/AS3로 이동하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/46136

문제

저는 Flash 7을 대상으로 하는 대규모 코드베이스를 가지고 있습니다. 많은 AS2 클래스 중.저는 새로운 프로젝트에 Flex를 사용할 수 있기를 바라지만, 우리 로드맵의 많은 새로운 내용은 이전 코드에 추가된 것입니다.

AS2와 AS3의 구문은 일반적으로 동일하므로 현재 코드베이스를 Flex/AS3으로 이식하는 것이 얼마나 어려울지 궁금합니다.나는 모든 UI 관련 항목이 불확실할 것이라는 것을 알고 있습니다(현재 UI는 많은 createEmptyMovieClip() 및 attachmentMovie() 항목을 사용하여 런타임에 생성됨). 하지만 UI와 컨트롤러/모델 항목은 대부분 분리되어 있습니다.

AS2 코드의 대규모 코드베이스를 AS3으로 포팅하려고 시도한 사람이 있습니까?얼마나 어려운가요?어떤 종류의 함정에 빠졌나요?이런 종류의 프로젝트를 수행하기 위한 접근 방식에 대한 권장 사항이 있습니까?

도움이 되었습니까?

해결책

다수의 AS2 클래스를 AS3으로 변환하려고 할 때 발견한 몇 가지 주목할만한 문제는 다음과 같습니다.

패키지 이름 지정

class your.package.YourClass
{
}

된다

package your.package
{
    class YourClass
    {
    }
}

수입품이 필요합니다

사용된 외부 클래스를 명시적으로 가져와야 합니다. 정규화된 이름으로 참조하는 것만으로는 더 이상 충분하지 않습니다.

인터페이스 메서드에는 '공개' 라벨을 지정할 수 없습니다.

이는 전적으로 의미가 있지만 AS2에서는 이를 수행할 수 있으므로 해당 항목이 있는 경우 제거해야 합니다.

명시적인 '재정의' 키워드

상위 클래스 함수를 재정의하는 모든 함수는 다음과 같이 선언되어야 합니다. 우세하다 C#과 유사한 키워드입니다.같은 맥락에서, 다른 인터페이스를 확장하고 함수를 다시 선언하는 인터페이스가 있는 경우 해당 재정의를 제거해야 합니다(다시 말하지만 공공의, 이 표기법은 어쨌든 의미가 없지만 AS2에서는 그렇게 할 수 있습니다.

모든 Flash 내장 항목이 변경되었습니다.

위에서도 언급했지만 지금은 그렇습니다. flash.display.MovieClip 그냥 대신에 영화클립, 예를 들어.이 범주에는 많은 세부 사항이 있으며, 이를 모두 찾을 만큼 충분하지는 않지만 여기서는 많은 짜증이 날 것입니다.

결론

저는 이 변환 작업을 성공적으로 수행하지는 못했지만 몇 시간 만에 다음을 제외한 모든 측면을 처리하는 빠른 C# 도구를 작성할 수 있었습니다. 우세하다 예어.가져오기를 자동화하는 것은 까다로울 수 있습니다. 제 경우에는 우리가 사용하는 패키지가 모두 몇 가지 루트 수준 패키지로 시작하므로 쉽게 감지할 수 있습니다.

다른 팁

우선, 당신이 사용하지 않기를 바랍니다 eval() AS3에는 이에 상응하는 것이 없기 때문에 프로젝트에 있습니다.

내가 할 일 중 하나는 Adobe의 마이그레이션 가이드 (기본적으로 변경된 내용을 항목별로 나열한 목록) 항목별로 간단한 검색 및 바꾸기 작업(정규식 사용)을 통해 각 항목을 변경할 수 있는지 아니면 수동으로 항목을 편집하는 것이 더 쉬운지 알아보세요. AS3에 대응합니다.아마도 많은 경우(특히 말씀하신 것처럼 마이그레이션할 코드의 양이 꽤 많은 경우)에는 변경 사항을 스크립팅하는 것이 가장 좋습니다(예:정규식 검색 및 바꾸기 사용) 및 자동 변경이 실패한 경계선 사례를 수동으로 수정합니다.

일부 테스트 사례를 통해 디버깅하고 실행하는 데 약간의 시간을 할애할 준비를 하십시오.

또한 다른 사람들이 이미 언급했듯이 AS2 SWF와 AS3 SWF를 결합하는 것은 좋은 생각이 아니며 실제로 작동하지도 않으므로 한 프로젝트의 모든 코드를 한 번에 마이그레이션해야 합니다.

다음은 AS2에서 AS3으로 이동하기 위한 몇 가지 추가 참고자료입니다.

Grant Skinners 입문 AS3 워크숍 슬라이드덱http://gskinner.com/talks/as3workshop/

리 브리멜로:ActionScript 3을 배워야 하는 6가지 이유http://www.adobe.com/devnet/actionscript/articles/six_reasons_as3.html

콜린 무크:필수 ActionScript 3(ActionScript 개발자에게는 "성경"으로 간주됨):http://www.amazon.com/Essential-ActionScript-3-0/dp/0596526946

마이크 챔버

mesh@adobe.com

내 경험에 따르면 AS3으로 마이그레이션하는 가장 좋은 방법은 두 단계, 즉 첫 번째는 구조적, 두 번째는 구문적입니다.

먼저, AS2에 머무르면서 리팩토링을 여러 차례 수행하되 최대한 AS3 아키텍처에 가깝게 하십시오.당연히 여기에는 모든 프레임 스크립트와 #include 스크립트를 패키지와 클래스로 이동하는 것이 포함되지만 AS3 흐름을 따르도록 모든 이벤트 리스너와 디스패처를 변경하는 등 더 미묘한 작업을 수행할 수도 있습니다(이벤트 유형에 대한 정적 클래스 속성 사용 및 메서드별 등록). 객체가 아닌).또한 모든 "내장" 이벤트(예: onEnterFrame)를 제거하고 중요하지 않은 마우스 상호 작용(예: 드래그) 및 키보드 상호 작용(예: 키를 눌렀습니다.)이 단계는 점진적으로 수행될 수 있습니다.

두 번째 단계는 AS2에서 AS3으로 변환하는 것입니다. 즉, "_x"를 "x"로 변경하고 모든 API 등을 변경하는 것입니다.이 작업은 점진적으로 수행할 수 없습니다. 단번에 최대한 많은 작업을 수행한 다음 모든 컴파일 오류를 수정하기 시작하면 됩니다.이러한 이유로 첫 번째 단계에서 더 많은 일을 할수록 두 번째 단계에서 더 많은 고통을 피할 수 있습니다.

이 프로세스는 상당히 큰 프로젝트에서 나에게 효과적이었지만 첫 번째 단계에서는 AS3의 구조에 대한 확실한 이해가 필요하다는 점에 유의해야 합니다.AS3를 처음 사용하는 경우 이식하는 데 필요한 일부 기능을 구축해야 할 수도 있습니다.예를 들어 레거시 코드가 드래그 앤 드롭 대상을 사용하는 경우 AS3에서 이를 구현하여 코드가 구조적으로 어떻게 변경되어야 하는지 이해하고 싶을 것입니다.그런 다음 이를 염두에 두고 AS2를 리팩터링하면 최종 구문 변경이 원활하게 진행됩니다.

저에게 있어 가장 큰 함정은 MovieClip을 연결, 복제 및 이동하고 깊이를 변경하는 등의 작업이 많이 필요한 부분이었습니다.이 모든 것들은 실제로 AS3처럼 보이도록 재설계될 수 없습니다.모든 것을 새로운 사고방식에 접목시킨 다음 버그 수정을 시작하면 됩니다.

마지막 참고 사항 - 적어도 자동화할 정도까지는 import 및 override 문과 같은 항목에 대해 걱정하지 않습니다.하나라도 놓치면 컴파일러가 이를 포착합니다.하지만 구조적인 문제를 놓치면 훨씬 더 큰 고통을 겪게 됩니다.

as2에서 이와 같은 더 큰 프로젝트를 마이그레이션하는 것은 단순한 검색 및 교체 이상의 것입니다.새로운 구문은 상당히 유사하고 적응하기가 간단합니다(lilserf가 언급한 것처럼). 그러나 as3이 더 엄격하고 새로운 이벤트 모델이 많은 문제를 일으킬 가능성이 크다는 사실만 빼면요.아마도 이전 코드를 가이드로 사용하여 거의 모든 것을 처음부터 다시 작성하는 것이 더 나을 것입니다.

지식 측면에서 as2 -> as3에서 마이그레이션하는 것은 매우 간단합니다.객체 지향 as2를 알고 있다면 as3으로 넘어가는 것은 전혀 문제가 되지 않습니다.

특별히 원하지 않는 한 UI에 mxml을 사용할 필요는 없습니다.Mxml은 UI 등을 구축하는 빠른 방법을 제공할 뿐이지만 액션스크립트를 사용하여 직접 수행하려는 경우 중단할 것이 없습니다(as2 코드에 해당 UI가 이미 있는 경우에도 이 방법이 더 쉬울 것입니다).Flex(Builder)는 UI 구축 및 데이터 바인딩과 같이 직접 수행하고 싶지 않은 작업을 수행하는 빠른 방법일 뿐이지만 기본적으로는 .swf의 일부를 생성하는 것일 뿐입니다. 마법 같은 것은 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top