Показать сообщение отдельно
Старый 04.07.2013, 12:37
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 1  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
Post Внедрение Шрифта. Runtime Loading.

Лебенсборн чыхыртма, православные.

Вот еще один базовый нуб-вопрос.

Читаю Мука. Пробую реализовать пример из главы Loading Fonts at Runtime.
Подход, насколько я понял, там следующий:

1. Создать вспомогательный файл с именем Fonts.fla, докУмент класс которого выглядит, например, так:
Код AS3:
package
{
  import flash.display.*;
  import flash.text.*;
 
 
  public class Fonts extends Sprite
  {
	[Embed(source="c:/windows/fonts/verdana.ttf", fontFamily="Verdana")]
    private var verdana:Class;
 
    [Embed(source="c:/windows/fonts/verdanab.ttf", fontFamily="Verdana", fontWeight="bold")]
    private var verdanaBold:Class;
 
	// Constructor
    public function Fonts()
	{
      // Register this class's embedded fonts in the global font list
      Font.registerFont(verdana);
      Font.registerFont(verdanaBold);
    }
 
 
  }
}
2.Создать основной файл, например RuntimeFont.fla, докУмент класс которого выглядит примерно так:
Код AS3:
package
{
	  import flash.display.*;
	  import flash.text.*;
	  import flash.events.*;
	  import flash.net.*;
 
 
	  public class RuntimeFont extends Sprite
	  {
			public function RuntimeFont()
			{
			  // Load the .swf file that contains the embedded fonts
			  var loader:Loader = new Loader();
			  loader.contentLoaderInfo.addEventListener(Event.INIT, initListener);
			  loader.load(new URLRequest("Fonts.swf"));
			}
 
 
			private function initListener (e:Event):void
			{
			  // The font has loaded, so now display the formatted text
			  outputMsg();
			}
 
 
			private function outputMsg():void
			{
			  // Create the text field
			  var t:TextField = new TextField();
			  t.embedFonts = true; 
 
 
			  t.text = "And the First Ones shall awaken on that day" +
			  		   "\nWhen man will return to the stars!";
 
			  addChild(t);
			}
 
	  }
}
3. В библиотеке этого основного файла создать New Font, указать любое имя, выбрать в списке, для данного случая шрифт Verdana.
Потом войти в Linkage Properties и поставить галочку Export for Action Script.
В результате появится неприятное предупреждение "A definition for this class could not be found in the classpath... ", но мы его тупо за-ОК-йиваем.

Ну вот и всё, походу дела.

Запускаю RuntimeFont и получаю вот такую ошибку:

Код:
TypeError: Error #2007: Parameter font must be non-null.
	at flash.text::Font$/registerFont()
	at Fonts$iinit()

Где прокол? В чем ошибка?

P.S. Если запустить отдельно Fonts.fla - то выдается та же ошибка, вероятно трабл в этом файле.
Однако там я ничего не менял (кроме более наглядного расположения кода), он взят прямо из книги.

Примечание: На всякий случай сообщу, что у меня Adobe Flash CS3 Professional (version 9.0).
Впрочем, примеры из книги должны быть универсальны для всех версий, наверное.


Последний раз редактировалось iNils; 25.07.2013 в 15:43.