「Flex sdk」カテゴリーアーカイブ

Flex sdk 4 でのフォント

以前の記事に述べた Flex4 が大部なる故なかなか読み進められない。

そんなところに一昨日「Flex SDK 4 ではフォントの埋め込み方法が異なる」を発見。 リンクの「ActionScript入門Wiki@rsakane」で試してみる。

フォントには Shy Foundry の SF Planetary Orbiter を選んでみる。 しかし、HDD にインストールしてあるのは多分どこかのアーカーイブ・サイトからダウンロードしたもので、フォント名には空白が含まれている。

package
{
	import flash.display.Sprite;
	import flash.text.TextField;
	import flash.text.TextFormat;
 
	public class Planetary extends Sprite
	{
		 [Embed("SF%20Planetary%20Orbiter.ttf", fontName="SF Planetary Orbiter", embedAsCFF='false')]
		private var font:Class;
 
		public function Planetary()
		{
			var tf:TextField = new TextField();
			tf.embedFonts = true;
			tf.defaultTextFormat = new TextFormat("SF Planetary Orbiter", 32, 0x0000ff);
			tf.autoSize = "left";
			addChild(tf);
 
			tf.text = "LEMON";
		}
	}
}

すると、エラーでコンパイルできない。

Planetary.as(10): エラー: トランスコーディング中の例外 :Unexpected exception encountered while reading font file
Planetary.as(10): col: 4: エラー: フォント'SF Planetary Orbiter' を構築できません
Planetary.as(10): col: 4: エラー: SF%20Planetary%20Orbiter.ttf をトランスコードできません。

%20 で置き換えられている空白の所為だろうか?

そう思ってファイル名をリネーム(空白削除)。
SF%20Planetary%20Orbiter.ttf → SFPlanetaryOrbiter.ttf

上記の AS3 からコンパイルしたものは僅か 14kb でしかないのに、mxml にしてコンパイルすると、ナント 328kb。

この原因は mxml の冒頭ですべてのライブラリを読み込むことにあるらしい。
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns="library://ns.adobe.com/flex/spark" xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="250" height="150">
  <s:layout>
	<s:VerticalLayout horizontalAlign="center" paddingTop="20" gap="20" />
  </s:layout>
  <fx:Script>
	<![CDATA[
		[Embed(source='assets/SFPlanetaryOrbiter.ttf',
		fontName='SF Planet Orbiter',
		mimeType='application/x-font')]
		private var font1:Class;
	]]>
  </fx:Script>
  <s:Label fontFamily="SF Planetary Orbiter"
  	text="LEMON" fontSize="32" color="#0000ff" />
</s:Application>

こんな例もありました。 ギリシア語フォントなのですが、SPIONIC_.TTF というフォントがあり、これもアンダースコアで同じくエラーが返されました。

SPIONIC_.TTF → SPIonic.ttf とリネームすれば、コンパイルすることができました。

σημείο πήξεως は日本語の「氷点」に当たる。

ActionScript3

ActionScript でわかりやすかったのが、「プログラマのためのFlash遊び方」の第2回 お絵かきしながら学ぶActionScript 3.0(前編) とその後編。

しかし、講座は Flex SDK 3.0 であるので、

$ mxmlc as/DrawTest1.as
設定ファイル "/home/name/flex/frameworks/flex-config.xml" をロードしています
/home/name/flex/as/DrawTest1.as: 警告: このコンパイル単位では、設定されたランタイム共有ライブラリを読み込むための、factoryClass が Frame メタデータで指定されていませんでした。ランタイム共有ライブラリなしでコンパイルするには、-static-link-runtime-shared-libraries オプションを true に設定するか、-runtime-shared-libraries オプションを削除してください。

/home/name/flex/as/DrawTest1.swf (719 バイト)
$ mxmlc -static-link-runtime-shared-libraries=true as/DrawTest1.as
設定ファイル "/home/name/flex/frameworks/flex-config.xml" をロードしています
/home/name/flex/as/DrawTest1.swf (718 バイト)

flex-config.xml を gedit で開いて書き換えました。

385 line on frameworks/flex-config.xml

    <!-- static-link-runtime-shared-libraries: statically link the libraries specified by the -runtime-shared-libraries-path option.-->
    <static-link-runtime-shared-libraries>true</static-link-runtime-shared-libraries>
            <!-- false changed true 20100529 -->

Flash Builder 4 and Flex 4 Bible

1.000 ページを越える大部の洋書であるが、コーディング例も多いというので、amazon に注文して、夕方届いた。

ナント厚さが 56mm、目次が 16 ページ、巻末の索引が 36 ページもある。

著者サイトからコーディング例の zip ファイル (3.6MB) がダウンロードでき、さらに抄録の pdf ファイルが 8 本(全章ではない)もダウンロードできる。

FXGeditor AIR

このウェブアプリ作者は 2 週間ほど前に AIR アプリも発表していた。これは迂闊であった。(画像クリックでダウンロード・サイトへ)

7jigenFXGAIR

ウェブアプリと AIR とどちらを採るかは好みかもしれない。

AIR アプリのインストールで今までコケたことがないのに、今回はエラーが起き、PC 再起動でやっと成功した。

インストールすると、真っ白な画面が表示されるが、「ファイル」 → 「新規作成」で左に見慣れたアイコンが並ぶ。

FXGAIR48 FXGAIR

これでデスクトップ上の作業が可能になる。

さて、日本語は先の追記のようにテキスト・エディタからのコピー&ペーストで可能な訳だが、フォント・ファイルのサイズが軽めのものを試してみる。

文字数限定の「懐映体」という 550kb のフォントを ubuntu で試してみる。

このアプリの扱いにくい点は通常の画像ソフトなら、たくさんフォント名が並んだ中から選択しますが、「フォント名」を分かっていなければ、そのフォントが使えないことになる点。

フォント名は id-cinema-light となっているから、フォント名のところに i を入力すれば、i から始まるフォント名が並ぶ。

さて、この出力された mxml に hokk-idcin.mxml と名前を付けた。 コンパイルしてみる。

$ mxmlc mxml/hokk-idcin.mxml
設定ファイル "/home/name/flex/frameworks/flex-config.xml" をロードしています
/home/name/flex/mxml/hokk-idcin.mxml: エラー: 無効なコンポーネント名 'hokk-idcin' : コンポーネント名は正しい ActionScript クラス名である必要があります。

エッ、ナンデ?

先の borra と違わんはずだが。・・・・ そう思って先の borra と全く同じ構成にしてみる。borra はウェブ上で作成した。 それでもなおエラーが吐き出された。

AS の場合、クラス名とファイル名が同一でなければならないというのは知っていたが、このエラー・メッセージからファイル名にハイフンはダメとは受け取れなかった。 そんなことも知らなかったのかと言われれば、それまでだが。

さて、swftools では「重い」フォントファイルを用いるとそれなりにファイル・サイズも増えることが知られている。 これも試してみようと思う。

次には ubuntu ではフォント名が表示されなかった「全字庫説文解字」という名前のフォント。 フォントのファイル・サイズが 9.9MB もある。 AIR は windows で作業した。

使用フォント名 SF Planet Orbiter 懐映体ライト 全字庫説文解字
ttf サイズ 35kb 551kb 10138kb
swf サイズ 39,244 39,242 39,275

この結果からフォントに関しては、所謂「埋め込みフォントは重くなる」の概念は捨ててもよいかと思われます。
Flex の仕様に負うものなのかもしれません。

昨日書いた「Error #2046: 読み込まれたファイルには、有効なシグネチャがありません。」と言うエラーはどうもリロードを 5, 6 回すると、起こるようだ、私の環境では。