2011-10-18 4 views
2

프로젝트에 Flash CS5 (자산) 및 FlashDevelop (코드)를 사용하고 있습니다. 우리는 텍스트 필드를 포함하는 약 20 개의 fla/swf를 가지고 있습니다. 모든 텍스트 필드는 동일한 글꼴을 사용하며 글꼴은 당사에만 적용되므로 아무도 컴퓨터에 설치되지 않으므로 포함해야합니다.Flash 런타임 공유 라이브러리를 사용할 수 없습니다.

내 궁극적 인 목표는 하나 개의 글꼴이 2 가지 이유를 들어, 텍스트 필드의 모든 사용을 포함하는 것입니다 : 우리가 글꼴 (다른 언어)에 더 많은 문자를 추가 할 때마다

  • , 우리는 추가해야 그 한 번이 아니라 20 번
  • 파일 크기는이를 달성하기 위해 노력하고 극적으로

나는 데 큰 어려움을 날려하지 않습니다. 내가 시도한 모든 것, 문자가 누락 된 것 같습니다 (각 fla의 텍스트 필드의 텍스트 속성에 입력 된 문자 만 포함 된 것 같습니다).

내가 시도하는 최신 솔루션은 런타임 공유 라이브러리를 사용하는 것입니다. 작동하는 것처럼 보입니다. 나는 FNFont.fla라고 불리는 fla를 가지고 있습니다. 라이브러리에 포함 된 글꼴 하나만 포함합니다. 글꼴은 AS3으로 내보내지고 프레임 1에서 내보내지고 런타임 공유를 위해 내보내집니다. URL은 FNFont.swf입니다 (모든 swf는 같은 폴더에 있습니다).

다른 모든 fla에서는 글꼴 포함으로 글꼴 개체를 만듭니다. 런타임 공유를 위해 가져 오기를 선택하고 FNFont.fla 파일과 동일한 클래스 이름을 지정합니다. URL은 FNFont.swf입니다. fla에는이 글꼴을 사용하는 많은 텍스트 필드가 포함되어 있습니다. 텍스트 필드는 다른 무비 클립의 자식으로 자신의 인스턴스를가집니다.

[Fault] exception, information=ReferenceError: Error #1065: Variable FontName is not defined. 

글꼴 이름이 FNFont.fla의 Font 객체의 클래스 이름 : 나는이 프로그램을 실행하고이 텍스트 필드의 인스턴스를 포함하는 무비 클립을로드 할 때

, 나는 오류 그리고 다른 모든 fla. 그것은 텍스트 필드의 인스턴스 이름 (또는 클래스 이름)이 아니므로 변수를 어떻게 생각하는지 이해할 수 없습니다. 이걸 좀 털어 놓을 수있는 사람?

감사

같은 당신은 "런타임 글꼴로드"를 검색 할 수 있습니다

답변

0

:

http://www.mokisystems.com/blog/flash-as3-loading-fonts/

또는 ...

http://nochump.com/blog/archives/20

만들기 글꼴 자산 SWF :

package { 

    import flash.display.Sprite; 

    public class FontLibrary extends Sprite { 

     [Embed(systemFont='Bank Gothic', fontName='emBank Gothic', mimeType='application/x-font')] 
     public static var BankGothicFont:Class; 

    } 

} 

로드와 애플리케이션에서 SWF를 등록 : 내 경험에

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); 
loader.load(new URLRequest("fontlibrary.swf")); 

private function completeHandler(event:Event):void { 
    var FontLibrary:Class = event.target.applicationDomain.getDefinition("FontLibrary") as Class; 
    Font.registerFont(FontLibrary.BankGothicFont); 
    var tf:TextField = new TextField(); 
    tf.defaultTextFormat = new TextFormat("emBank Gothic", 12, 0); 
    tf.embedFonts = true; 
    tf.rotation = 15; // to demonstrate the embed worked 
    tf.text = "blah blah blahnblah blah blahnblah blah blah "; 
    addChild(tf); 
} 
+0

이전에 시도했지만 작동하지 않았습니다. 글꼴이 임베드 된 것을 볼 수는 있지만 (enumerateFonts를 사용하고 RegisterFont 다음에 추적하여) 많은 문자가 누락되었습니다. swf의 일부를 디 컴파일 한 후 Flash가 자동으로 Text -> Font Embedding에 아무것도 없어도 각 swf에 글꼴을 포함하고 있음을 알았습니다. 포함 된 문자는 라이브러리의 각 텍스트 필드의 Text 속성에 사용 된 문자입니다. 텍스트 필드는 RegisterFont를 통해 포함 된 글꼴 대신이 보이지 않는 포함 글꼴을 사용하고있었습니다. –

1

당신은 즉시 새로운 TextFields을 작성해야합니다.

SWF에 이미 컴파일 된 을 사용할 수 없습니다. 그렇지 않으면 위에서 설명한 문제가 발생합니다.

Adobe를 사랑하게 만드는 그 작은 버그 중 하나입니다.

0

이전에 비슷한 문제가 발생하여 로더에 적절한 ApplicationDomain을 설정하는 것이 문제가 있음이 밝혀졌습니다.

비슷한 상황이 발생했는지는 확실하지 않지만 여기에 있습니다.

    • CS5.5 나는 도서관에서 여러 글꼴과 함께 fonts.swf 있습니다. 그들은 각각 런타임 공유를 위해 Export로 설정되고 클래스 이름이 부여됩니다.
    • 몇 개의 하위 SWF가로드되는 주 swf가 있습니다.
    • 각 자식 SWF에는 포함되지 않은 글꼴 개체가 있습니다. 글꼴 개체는 "런타임 공유를 위해 가져 오기"로 설정되며 fonts.swf와 동일한 클래스 이름을 갖습니다.

    필자의 경우 첫 번째 하위 swf는 fonts.swf를 올바르게로드하고 글꼴에 액세스합니다. 글꼴에 액세스하려고 시도한 두 번째 자식 swf는 이 아니며은 fonts.swf를 다시로드하고 위에서 설명한 것과 같은 오류가 발생합니다.

    Flash는 글꼴이 전체 응용 프로그램에 이미 등록되어 있다고 가정하므로 글꼴을 다시로드하지 않는 것이 현명합니다. 그러나 각 child.swf는 기본값이 ApplicationDomain 인 부모에로드되므로 자식은 부모의 클래스 경로에 액세스 할 수 있지만 서로는 액세스 할 수 없습니다. 따라서 첫 번째 자식은 fonts.swf에있는 글꼴에 액세스 할 수 있지만 두 번째 자식은 부모가 아닌 형제이기 때문에 그렇지 않습니다. 아이들의 전에 부모 SWF에

    1. 로드 fonts.swf에 액세스하려고 :

      나는이 주위에 두 가지 방법이있다 생각합니다.

    2. 자식 swfs가 주 상위 swf와 동일한 ApplicationDomain을 공유하도록 ApplicationDomainApplicationDomain.currentDomain으로 설정합니다.

    나를 위해 문제가 해결 된 옵션 2를 선택했습니다.

    var context : LoaderContext = new LoaderContext(); 
    context.applicationDomain = ApplicationDomain.currentDomain;     
    var clipLoader:Loader = new Loader(); 
    clipLoader.load(url, context);