2012-10-19 10 views
6

Widziałem wiele pytań związanych z osadzaniem czcionek w pamięci flash i nie mogę znaleźć odpowiedzi na mój problem.Osadzanie czcionek As3

Załaduję czcionki z czcionki swf i rejestruję je na wysokim poziomie, aby mogły być używane w swfach potomnych. Problemem jest to, że swf dziecka może również osadzać te czcionki, ale nie jawnie, co oznacza, że ​​są one osadzone tylko dlatego, że istnieją pola w swf potomnym, które używają pewnych znaków czcionki. Oznacza to, że pola tekstowe w elemencie potomnym używają niekompletnej osadzonej czcionki zamiast osadzonego kompletnego zestawu zarejestrowanego w elemencie nadrzędnym lub dowolnym poziomie elementu nadrzędnego. Oznacza to również, że pliki SWF, które mogą stać się dziećmi tego dziecka, nie otrzymają pełnej czcionki.

Moje pytanie: Czy jest jakiś sposób, aby powiedzieć Flashowi podczas kompilacji, aby nie osadzać, pod żadnym pozorem, czcionek w swf? Jeśli nie, istnieje narzędzie, które usuwa osadzone czcionki z skompilowanego pliku SWF?

Oto kilka rzeczy, które dały do ​​myślenia/zauważyliśmy do tej pory:

  • Wydaje się, że każda klasa Font jest związana z ApplicationDomain. (Potwierdzenie tego może być pomocne)
  • Używanie czcionek urządzenia w polach tekstowych nie spowoduje osadzenia żadnych czcionek. (Nie jest to jednak opcja dla mnie, ponieważ potrzebuję pól do osadzania czcionek w środowisku wykonawczym z nadrzędnego pliku swf.)
  • Nie mogę znaleźć sposobu na wyrejestrowanie czcionek lub po prostu powiadomić wczytane pliki potomne, aby użyły czcionek nadrzędnych, co oznaczałoby przydatne do zastosowania do wczytanych plików potomnych.
  • Może być możliwe załadowanie elementu podrzędnego w innym kontekście, który pozwoliłby nadrzędnym definicjom czcionek nadpisać definicje podrzędne. (Czy byłyby dwie definicje, a jeśli tak, która z nich ma pierwszeństwo?)
  • Ładowanie zasobów z biblioteki dziecka i dodawanie ich do sceny powoduje pobranie nadrzędnej definicji czcionki. (ma to sens, ponieważ zasób jest tworzony poza domeną dziecka).
  • Możliwe rozwiązanie może polegać na tym, aby nie dodawać żadnych znaków do pól tekstowych w celu kompilacji pliku SWF, ale nie jest to również opcja, ponieważ potrzebuję tekst statyczny za pomocą dowolnej czcionki.

Zacząłem formułować definicję problemu, który może być niepoprawny, więc proszę, jeśli to konieczne, cofnij się o kilka kroków i daj mi inne spojrzenie na problem. Jak dotąd wydaje mi się, że pytanie, które zadałem powyżej, jest właściwym pytaniem, a jeśli istnieje rozwiązanie, wszystkie moje problemy ustąpią.

Dzięki!

+0

Jestem trochę niedorzeczny, myślałem, że rozumiem twoje pytanie, i byłem w trakcie pisania odpowiedzi, wtedy zdałem sobie sprawę, że nie jestem w 100% pewien, czy w pełni zrozumiałem twoje pytanie. Mógłbyś podać jakiś kod, pomaga mi to poprawić jaśniejszy obraz. – Taurayi

+0

Chcesz osadzić każdą czcionkę we własnym pliku SWF, a następnie załadować ją dynamicznie w razie potrzeby? –

+0

Chcę mieć załadowaną dowolną liczbę czcionek, zanim zostaną załadowane jakiekolwiek pliki SWF widoku. Ta część nie jest problemem. Problem polega na usunięciu czcionek z plików potomnych swfs, aby czcionki załadowane przed swfami potomnymi mogły być używane w plikach potomnych swfs i nie kolidowały z definicją czcionki swfs dla potomnych. – Jordan

Odpowiedz

0

Okazuje się, że jest to błąd z mojej wersji programu Flash Professional. Zrobiłem aktualizację, a udostępniane czcionki runtime są teraz możliwe. Prawdopodobnie wskażę wspólną czcionkę pod złym adresem dla czcionek, a wtedy czcionki będą pochodzić z domeny aplikacji nadrzędnej, ponieważ nie są kompilowane do potomnych plików SWF. Używam teraz Flash Professional CS5.5 11.5.1. Używałem CS5.5 11.5.0.

http://forums.adobe.com/message/3926344

Dzięki Adobe za marnowanie mojego czasu.

+0

Naprawili i udokumentowali to, prawda? –

0

Jeśli mam rację w zrozumieniu, niż chcesz usunąć/wyrejestrować wszystkie czcionki, które nie są kompletne, jako wersję tej konkretnej czcionki, która została już załadowana, ale osadzona w innym pliku SWF?

Każda osadzona czcionka tworzy klasę, każdy plik SWF ładowany za pomocą klasy Loader jest domyślnie ładowany we własnej domenie aplikacji, aby zapobiec konfliktowi przestrzeni nazw, ale można wymusić na ładowarce załadowanie wszystkiego do bieżącej domeny aplikacji z parametrem »loader context« metody load() Loader'a. W ten sposób możesz spróbować wymusić zastąpienie klas tymi samymi przestrzeniami nazw, ale nie możesz kontrolować, którą klasę wyrzucić, co oznacza, że ​​nie możesz sprawdzić, która czcionka ma więcej glifów. (może po prostu wyrzuca błędy zamiast przesłonić i wcale nie działa, nie jestem tego pewien).

Z drugiej strony należy zadać pytanie, w jaki sposób czcionki są faktycznie osadzone w plikach swf dziecka.Nie znam innego sposobu niż do osadzania czcionek jak:

in * fla-plików jako symbol »biblioteka«, lub w kodzie flashbuilder lub wygiąć tak: [Embed(source="c:/windows/fonts/verdana.ttf", fontFamily="Verdana", embedAsCFF="false")],

lub to:

@font-face { 
    src: url("../assets/MyriadWebPro.ttf"); 
    fontFamily: myFontFamily; 
    advancedAntiAliasing: true; 
} 

w plikach mxml. Tak więc (to jest to, jak sądzę) wynikowa Nazwa generowanej klasy zależy od właściwości »rodziny czcionek« (lub nawet większej liczby ustawień) podanej przez programistę, to znaczy nawet jeśli ta sama czcionka jest osadzona dwukrotnie w klasie Nazwa może się różnić w zależności od ustawień.

Również nie ma metody Font.unregisterFont(), więc jak sobie z tym poradzić, pozostaje dobre pytanie, na wypadek, gdybyś znalazł tę samą klasę Czcionek (być może RegExp staje się przyjaznym pomocnikiem).

Myślę, że aby rozwiązać ten problem, potrzebujesz kontroli w czasie kompilacji, korzystając z plików projektów * .xfl opartych na xml, może pomóc, ale nawet przywoływany plik czcionek może mieć inną nazwę.

Miła problemem, powodzenia

+0

Dzięki za odpowiedź. Osadzanie czcionek ma miejsce również wtedy, gdy dynamiczne pola tekstowe są ustawione na anty-alias dla animacji lub czytelności, co jest naprawdę denerwujące, ponieważ wtedy dostajesz tylko kilka znaków wprowadzonych w polu. Również tekst statyczny powoduje definicję czcionki używanej do kompilacji w pliku SWF bez znaków, więc posiadanie statycznego pola tekstowego blokuje również wszystko w tym swf (lub domenie aplikacji) przed użyciem nadrzędnej definicji tej samej czcionki.Zacząłem dzisiaj szukać rozpakowywania flas, ale dzięki za potwierdzenie, że to możliwe rozwiązanie. – Jordan

+0

Nie wiedziałem tego, ale dobrze wiedzieć – philipp

0

miałem wiele problemów z wykorzystaniem czcionek z lampą błyskową. Nadal jest to problem na html z różnymi przeglądarkami renderującymi na różne sposoby.

W każdym razie, dla Flasha, zbudowałem ten zestaw narzędzi, który bardzo mi pomógł. Sprawdź, jak dostosować czcionki. Jeśli wykonasz te kroki, jestem pewien, że problem zostanie rozwiązany.

https://github.com/tbwa/AS3-Toolkit/tree/master/src/com/utils/text