[日記] MacBook Air 13inch をメインマシンにして1ヶ月

2011/08/30

こんにちは。きんくまです。

新MacBook Air 13inchを発売日に買いまして、それで1か月ちょっと経ちました。
MacBook Pro 15inchをメインマシンにしてから日に日にいろいろなことが気になってしまって、とうとう買ってしまいました。

MBPで使っていて気になっていたこと。
・パームレストの熱さ
・大きさ
・重さ

パームレストの熱さは文字通り、熱い、熱いんです。正直長時間は使えないです。
だから自分は外部キーボードで作業してました。
これって、ラップトップの宿命みたいなもので、高速CPUを小さいところに埋め込めば
そりゃ熱も逃げられないヨ!って感じです。
MBPの前のメインマシンのWin7のVAIO type zがうちにあるんですけど、
これもファンがすごく回るし、パームレストやキーボードが熱くて、
夏場は同じくそのままでは使えず、外部キーボードでやっとりました。

大きさは、15inchは自宅で作業している分にはいいのですが、電車の中で座って
作業すると、隣の人のこと気にするサイズなんですよ。あと、奥行きもちょっとだけでかい。
打ち合わせでたまに都内にいくことがあるんですが、うちから都内(特に渋谷とかの
山の手の左側半分)が遠いんです。片道1.5時間wとか。
往復3〜4時間とかいう、あり得ないところにすんでおります。
なので、当然電車の中で作業ができた方いいという私の個人的な理由がありまして、
大きさも気になっていたところであります。
ちなみにVAIOは13inchなので、winのときはそこまで気にならんかった。

あと、重さです。長時間背負って歩いていると、だんだんと重くなってきてました。

それで、MBAの新モデルの発売前に、新モデルは7月に出るらしいとか、
噂サイトとかでチェックして
欲しいな欲しいなとうずうずしておりまして。
店頭に行って、前のモデルを見てたりしてました。

それで、発売日がきまして。
ええ発売日の発売時刻にもちろん即ポチしましたよ!

MBAでは先の問題点が全て解消されました。

パームレストは普通に使っている分には、ほんのり暖かいけど、熱っ!ってほどには
ならないし。(あ、公平のため一応ちゃんと書いておくと、動画見てたりすると
ファンがうるさくまわってそれなりに熱くなります。耐えられないほどじゃないけど。)
ファンの音など普段は聞こえなくて、全く静かです。

大きさもほどよく、重さもAirっていうだけあって、ずいぶん軽いです。

画面ピッチっていうか密度が高いので、若干みづらい気もしますけど、
普段外部ディスプレイにつなげてやっている分にはそんなに気にならないです。
本体のディスプレイで作業しているときも、慣れればアリなレベルかと。
ちなみにVAIO type Zは13inchで1600pxとかいうタイプだったんですが、
これは目の悪い私にはそのままでは過酷なピッチでした。文字小さすぎ!
これも外部ディスプレイでやってたからあんまし関係ないけど。

そんで、肝心の速度です。
これは気になるところとそうでないところと。といったところです。

全体的にはSSDの恩恵を受け取りまして、起動が速いです。
OSそのものもそうだし、アプリの立ち上がりも。

メモリが私のは4GBで、8GBだったMBPより心配な容量なのですが、
Photoshop+Fireworks+FlashBuilder+Chrome+ThunderBirdとかでも特に問題なく動いております。
XCodeも大丈夫です。

Prallelsも入れてみたところ、こいつはやっぱりキツイですね。
常に動かしとくわけにはいかないかも。そのかわし、SSDなんで
立ち上がりがHDDよりずいぶん速いので、OSの起動はそこまでおっくうには
ならないかと。

CPUはcore i5の1.7GHzです。アップグレードすることも可能だったんですが、
これまでのCPUさんたちがその体に対して速すぎる速度で熱くなりすぎちゃったんで、
今回はそれを踏まえてあえてそのままにしておきました。
ていうか、もっと遅いやつでも個人的にはいいかと思ったり、、。

MBPより遅いかもという場面は、ソースコードをコンパイルする時ですね。
これはCPUが低いのでどうしようもないかと。
あー、でもひょっとしたらあんまり変わらないかも。CPU低いから遅いとか
思い込んでるかも。ちゃんと計ってないからわからないです。

そんで、とにかくメインマシンとしてこの1ヶ月ちょっと使ってきましたが、
全く問題なく使えているので、前のMBPは売ってしまいました。ありがとうMBP。

LINEで送る
Pocket

[AS3] デバッグ用のクラス KKConsole KKLogger

2011/08/10

こんにちは。きんくまです。
シュタインズゲートのアニメを見てて続きが気になって、XBox版の原作ゲームを買いました。
にもかかわらず、なかなか進められず、アニメのところまで追いつけず、結局アニメより先の内容は知らない今日この頃です。

さて、デバッグ用のクラスを2つ作りました。

KKConsole

ブラウザのconsole.logに出力します。
いざコンテンツをアップロードした後に、traceコマンドを使ってもそれを見るのが大変だったりするので、
ブラウザに出力すれば、簡単に確認できます。

console_fig1

Console.logに対応しているのって、ChromeとFirefox, Safariだったと思います。
IEでデバッグしたことないからわからないです。

ソース

package kinkuma.util
{
	import flash.external.ExternalInterface;

	public class KKConsole
	{
		public static function log(text:String):void
		{
			if(ExternalInterface.available){
				ExternalInterface.call("console.log", text);
			}
		}
	}
}

使い方

package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	import kinkuma.util.KKConsole;
	
	[SWF(width="450",height="450",backgroundColor="0xffffff")]
	public class KKConsoleUsage extends Sprite
	{
		private var _clickTimes:int = 0;
		
		public function KKConsoleUsage()
		{
			addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
		}
		
		protected function onAddedToStage(event:Event):void
		{
			removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
			stage.addEventListener(MouseEvent.CLICK, onStageMouseClick);
		}
		
		protected function onStageMouseClick(event:MouseEvent):void
		{
			_clickTimes++;
			var logText:String = "You clicked " + _clickTimes + " time";
			if(_clickTimes > 1){
				logText += "s";
			}
			KKConsole.log(logText);
		}
	}
}

ちなみに、もっと便利なやつは既に作られています。
今回作った方は、与えられた引数をそのままログに出力します。

>> AS3 でどこからでも log();
>>【デバッグ強化週間】log.asを使ってFirebugのコンソールにデータを出力!

KKLogger

ログを黒い四角の上に出力します。
ブラウザでは上のconsoleが使えるんですが、
例えばAndroid案件だと実機でのログ出力に困ったりします。
そんなときに使えると思います。
ていうか、こないだたまたまそういうのがあったので使いました。

package kinkuma.util
{
	import flash.display.Graphics;
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.text.TextField;
	import flash.text.TextFormat;
	
	public class KKLogger extends Sprite
	{
		private var _textField:TextField;
		private var _bg:Shape;
		
		public function KKLogger(aWidth:int = 200, aHeight:int = 150)
		{
			_textField = new TextField();
			_textField.multiline = true;
			_textField.width = aWidth;
			_textField.height = aHeight;
			addChild(_textField);
			var tf:TextFormat = new TextFormat();
			tf.font = "_sans";
			tf.color = 0xffffff;
			tf.size = 10;
			_bg = new Shape();
			addChildAt(_bg, 0);
			var g:Graphics = _bg.graphics;
			g.beginFill(0x000000, 0.8);
			g.drawRect(0,0,aWidth, aHeight);
			g.endFill();
			_textField.defaultTextFormat = tf;
			mouseChildren = mouseEnabled = false;
		}
		
		public function log(text:String):void
		{
			if(_textField.text == ""){
				_textField.text = text;
			}else{
				_textField.appendText("\n" + text);
			}
			var tft:String = _textField.text;
			var ar:Array = tft.split("\r");
			while(_textField.textHeight + 5 > _textField.height){
				ar.shift();
				_textField.text = ar.join("\n");
			}
		}
	}
}

使い方

package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	import kinkuma.util.KKLogger;
	
	[SWF(width="450",height="450",backgroundColor="0xffffff")]
	public class KKLoggerUsage extends Sprite
	{
		private var _clickTimes:int = 0;
		private var _logger:KKLogger;
		
		public function KKLoggerUsage()
		{
			_logger = new KKLogger();
			_logger.x = 10;
			_logger.y = 10;
			addChild(_logger);
			
			addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
		}
		
		protected function onAddedToStage(event:Event):void
		{
			removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
			stage.addEventListener(MouseEvent.CLICK, onStageMouseClick);
		}
		
		protected function onStageMouseClick(event:MouseEvent):void
		{
			_clickTimes++;
			var logText:String = "You clicked " + _clickTimes + " time";
			if(_clickTimes > 1){
				logText += "s";
			}
			_logger.log(logText);
		}
	}
}

wonderflにもアップしました。

KKLogger – wonderfl build flash online

githubにアップしました

githubに初めてアップしてみました。
>> https://github.com/KinkumaDesign/KKDebug

sshがなんちゃらかんちゃらって設定がよくわかんなかったけど、マニュアルに沿ってやったらなんかできました。
良かった良かった。

LINEで送る
Pocket

[iOS] XCode4.1でのStatic Libraryの作成と利用

2011/08/8

こんにちは。きんくまです。

今回はXCode4でのStatic Libraryについてです。
XCode3用や似たようなものがネット上に公開されてたりしたのですが、4.1ではうまくいかず。
現在のXCode4.1で動くものを調べるのに何日かかかりました、、。
なので、以下のものは現在のXCode4.1では動くのですが、これから先には動かなくなる可能性もあります。

Static Libraryとframework

どちらも、まとまったコードを別のプロジェクトでひっぱることができます。
だから、自分でよく使うコードや、似たプロジェクトで共有化できるコードなんかを
まとめておくと便利です。

Static Libraryと似たものにframeworkがあります。
iOSではAppleの用意したUIKit.frameworkなんかがあります。
これには、画像やらxibやらを含めることができます。
が、Mac OSの方ではframeworkを作るのが比較的楽のようですが、
iOSだとそうもいかず、それなりに難しいみたいです。

[Mac][iPhone][develop] iPhone OS用のほぼFrameworkの作り方

それで、今回は画像などのアセット関係は含められないけど、
ヘッダーファイルと実装ファイルを両方組み込めることのできるStatic Libraryについて
説明します。
ちなみに、Objective-C++(.mm)もきちんと動きました。

、、説明します。と書いておきながら、内容は全て下記リンク先をほぼそのままなぞっています。
不明点は下記リンク先の原文を参照してください。
これがなければ、できなかったです。ありがとうございますです。

>> Using Open Source Static Libraries in Xcode 4

workspaceを作る

workspacesの機能を使うことで、複数プロジェクトを1つのworkspaceで管理することができます。
空のworkspaceを作成
File > New > New WorkSpace

lib-fig1

Static Libraryを作る

共有化するStatic Libraryを作ります。作り方は2つあります。

1. 既存のプロジェクトのtarget設定をStatic Libraryにする
2. はじめからStatic Libraryをつくる

順番に説明します。

1. 既存のプロジェクトのtarget設定をStatic Libraryにする

target設定からAdd Targetを選ぶ。左下のボタンです

lib-fig2

iOSのFramework & Library > Cocoa Touch Static Libraryを選ぶ

lib-fig3

target名はなんでもいいんですが、ここでは「もとのプロジェクトの名前」+ 「_lib」としました。
するとtargetに追加されます。

lib-fig4

Build Settingsのところをこれからいじる必要があるのですが、次の項目のあとにまとめて説明します。

※参考 以下の方法だと実機用だとOKなのですが、simulator用でひっかかってしましました。
How to create universal static libraries on Xcode 4: the traditional way

2. はじめからStatic Libraryをつくる

File > New > New Projec > tiOSのFramework & Library > Cocoa Touch Static Library
から作成すれば1と同じです。

Build SettingsとBuild Phases

Build Settings

Deployment > Installation Directory > $(BUILT_PRODUCTS_DIR)
これで、ビルドした後にでき.aファイル(ファイル一覧の中のProductsにできます)を
このworkspace内の別のプロジェクトから参照することができます。

Linking > Other Linker Flags > -ObjC
XCode4だと最初からこうなっているかもしれません。XCode3だと違うみたいです。
ライブラリの中にObj-Cのカテゴリを使っている場合は
“-all_load” or “-force_load”を選ぶ必要があるかもとのことです。

Packaging > Public Headers Folader Path > $(TARGET_NAME)
これで、別のプロジェクトで#importで.hファイルが見えたり、コード補完がきくようになります。
コード補完や.hがもしうまく行かない場合は、すごーくアナログなんですが、ライブラリのヘッダーファイルを
目的のプロジェクト内にコピーする必要があるようです。
でも、自分のXCode4.1だとそれをしなくても今のところうまくいっているようです。

Build Phases

Compile Sourcesには実装ファイル(.mとか.mmとか)
Copy Headersにはヘッダーファイル(.h)を入れます。
もしかするとすでに入っているかもしれません。
Copy HeadersのところはPublic, Private, Projectとありますが
公開ファイルはProjectではなく、Publicの方に移しておきます。

lib-fig5

build

ビルドします。ビルドは2回行います。release用とsimulator用です。

lib-fig6

左上のプルダウンから、ライブラリのtarget名+iOS Deviceを選んでProduct > Build
ライブラリのtarget名+iPhone or iPad Simulatorを選んでProduct > Build
します。
これは、実機とsimulatorではCPUの種類が違うために、こういうことをしています。

※11/08/15追記 実際に利用していたら、どうやらtarget名+iOS Deviceのみのリビルドで
他のプロジェクトにうまく反映されています。だけど、うまくいかない場合は2回やる必要があるかも?

詳しくは
[iOS] Static Library (3) 複数のアーキテクチャへの対応は?

別のProjcetから利用する

別のプロジェクトのTARGETS設定を開いて
Build Phasesからさきほど作成した.aファイルを選択します。

lib-fig7

今度はBuild Settings を開いて
Search Paths > User Header Search Paths > $(BUILT_PRODUCTS_DIR)
にしてRecursiveにチェックを入れます。
これで、読み取り側の方からもLibraryのヘッダーファイルの情報が読み取れるようになりました。

これで、利用側のprojectからテストしてみるとうまくいくはずです。

※2012/06/17追記
ArchiveとDebug両方通すために、上の$(BUILT_PRODUCTS_DIR)の代わりに
$(SOURCE_ROOT)/../Libraryの名前
にしたらうまくいった。この方法なら、ヘッダーファイルをコピーする必要はなく便利。
>> 参照

※2011/08/22追記
Archive(Release)するときに、ビルドは通る(Build for Archive)のだけれど、
それらのファイルをまとめるとき(Archive)は、うまくいかずエラーが出てしまった。
なので、Static Libraryの.hファイル全部をコピーして、使う方のプロジェクトに
全部追加したところ、うまく行った。
この辺、どうやったらそんなことしなくていいのかよくわからない。
わかった人がもしいたら、コメント欄にでも書いてください。

注意点とか

・XCode3までの方法とやり方が変わっている
・Static Libraryには画像ファイルを含められない

とか。

LINEで送る
Pocket

[AS3] 1行の編集可能なTextFlow, Text Layout Framework

2011/07/25

こんにちは。きんくまです。
TLF(Text Layout Framework)で、編集可能なTextFlowを作りたかったです。
そんで、通常だとEnterキーを押すとそのまま改行されてしまうのですが、
それを1行にするように挙動をかえました。

まず、EditManagerのサブクラスを作ります。
キーボードのEnterが押されたときに何もしないようにします。

package
{
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
	
	import flashx.textLayout.edit.EditManager;
	import flashx.undo.IUndoManager;
	
	public class CustomEditManagner extends EditManager
	{
		public function CustomEditManagner(undoManager:IUndoManager=null)
		{
			super(undoManager);
		}
		
		override public function keyDownHandler(event:KeyboardEvent):void
		{
			if(event.keyCode != Keyboard.ENTER){
				super.keyDownHandler(event);
			}		
		}
	}
}

次に、それをTextFlowのinteractionManagerにひもづけます。
これで完了です!

package
{
	import flash.display.Sprite;
	import flashx.textLayout.formats.LineBreak;
	
	import flashx.textLayout.container.ContainerController;
	import flashx.textLayout.conversion.TextConverter;
	import flashx.textLayout.edit.EditManager;
	import flashx.textLayout.elements.TextFlow;
	
	[SWF(width="450", height="450", frameRate="30")]
	public class OneLineEditableTLF extends Sprite
	{
		public function OneLineEditableTLF()
		{
			createTextLine();
		}
		
		private function createTextLine():void
		{
			var sp:Sprite = new Sprite();
			addChild(sp);
			sp.x = 100;
			sp.y = 50;
			
			var markup:XML = 

Hello, World

; var textFlow:TextFlow = TextConverter.importToFlow(markup, TextConverter.TEXT_LAYOUT_FORMAT); var containerController:ContainerController = new ContainerController(sp, 200, 16); textFlow.flowComposer.addController(containerController); var editManager:EditManager = new CustomEditManagner(); textFlow.interactionManager = editManager; textFlow.fontSize = 16; textFlow.lineBreak = LineBreak.EXPLICIT; textFlow.flowComposer.updateAllControllers(); } } }
LINEで送る
Pocket

[iOS] 戦術を考えてアニメーションさせるiPadアプリを作りました

2011/07/14

こんにちは。きんくまです。

先日リリースされたのですが、私がプログラムの担当をした
iPadアプリがリリースされました。

>> iTunes プレビューはこちら

アニメーションのサンプルです。 2D / 3Dでアニメーションします。

>> サポートページ

これはどんなアプリかといいますと、

スポーツでホワイトボードにマグネットを貼付けて、作戦を練るものを
iPadでやっちゃおう!
というものです。

動画をみていただくといいかも。
Flashやっている人だったら「12フレームのタイムラインで作戦を練る」
でイメージできるかも。

ハーフタイムなんかに、監督やコーチの人がこれを使って
「よし後半はこのフォーメーションでいくぞ!」
なんて言ってくれるのを夢見て開発しました。

作った作戦は、iPadから取り出せるので、メールなんかで他の人と交換できたりします。

今後、別競技版も順次リリース予定です。
ぜひチェックしてみてください!

—-
技術的にはObjective-CとC / C++の共存。OpenGLでの描画なんていうのも
ありましたけど、少しずつ勉強してなんとかなりました。

LINEで送る
Pocket

[AS3] FlexSDK3とFlexSDK4でのFont Embed, TextFieldとTextLayoutFramework

2011/07/10

埋め込み方法の違いなどのまとめ

■FlexSDK 3.x とFlex SDK 4.x
Flex SDK 3.x >> Minimum Player version 9.0.124

Flex SDK 4.x >> Minimum Player version 10.0
4.5は10.2からになってた

■TextFieldとText Layout Framework

TextField Text Layout Framework
データが軽くてすむ。
普通のやり方だと動的に縦組ができない。 (静止テキストは可能)
取り扱いが楽。
Player 9.0 higher
フォントの埋め込みは非CFF
データが若干重い。
縦組ができる。
取り扱いが面倒。
Player 10.0 higher。
フォントの埋め込みは要 CFF

CFFとはCompact Font Formatのことで、従来の埋め込み方法よりもデータが軽くなるとか。
>> Compact Font Format

Text Layout Framework (TFL)については、
>> http://labs.adobe.com/technologies/textlayout/

上のページからリンクされているPDFを読むと、どんなもんで、どんなことがやれることがわかってよいです。
Text Layout Framework Overview(pdf)

そんで、さきほどのPDFと下記ページにあるDownload examples.を落としてきてやり方をみると、
かなりできるようになるのではないかと。
Text Layout Framework(Adobe Open Source)

フォントの埋め込み方法については
>> Embedded fonts and the Text Layout Framework

縦書き方法は「にゃあプロジェクト」さんに書いてありました。どうもです。
[TLF] TextLayoutFrameworkだ! (1)

Flex SDK 3.x での埋め込み。TextFieldよう

package
{
	import flash.display.Sprite;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.text.TextFormat;

	[SWF(width="400", height="400",frameRate="30",backgroundColor="0xffffff")]
	public class SDK3Test extends Sprite
	{
		[Embed(source='A-OTF-FutoGoB101Pro-Bold.otf',
        	   fontName='MyFutogo',
			   fontWeight="Bold",
        	   mimeType='application/x-font'
     	)]
		private var _myFontClass:Class;
		
		public function SDK3Test()
		{
			var textfield:TextField = new TextField();
			var textFormat:TextFormat = new TextFormat();
			textFormat.font = "MyFutogo";
			textFormat.size = 21;
			textfield.autoSize = TextFieldAutoSize.LEFT;
			textfield.defaultTextFormat = textFormat;
			textfield.text = "Hello embed font!";
			textfield.embedFonts = true;
			addChild(textfield);
			textfield.x = 30;
			textfield.y = 30;
		}
	}
}

EmbedのところがfontName, fontWeightを指定するところに注目

SDK 4.x でフォント埋め込みTextFieldよう

package
{
	import flash.display.Sprite;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.text.TextFormat;
	
	[SWF(width="400", height="400",frameRate="30",backgroundColor="0xffffff")]
	public class SDK4Test extends Sprite
	{
		//Unicode Range Basic Latin
		[Embed(source='A-OTF-FutoGoB101Pro-Bold.otf',
			   fontFamily = "MyFutogo", 
			   embedAsCFF = "false",
			   unicodeRange = "U+0020-002F,U+0030-0039,U+003A-0040,U+0041-005A,U+005B-0060,U+0061-007A,U+007B-007E",
        	   mimeType='application/x-font'
     	)]
		private var _myFontClass:Class;
		
		public function SDK4Test()
		{
			var textfield:TextField = new TextField();
			var textFormat:TextFormat = new TextFormat();
			textFormat.font = "MyFutogo";
			textFormat.size = 21;
			textfield.autoSize = TextFieldAutoSize.LEFT;
			textfield.defaultTextFormat = textFormat;
			textfield.embedFonts = true;
			textfield.text = "Hello embed font!";
			addChild(textfield);
			textfield.x = 30;
			textfield.y = 30;
		}
	}
}

fontName→fontFamilyに変更。fontWeightがなし。
embedAsCFFを追加してfalseに。
unicodeRangeを指定可能

SDK 4.x でフォント埋め込みTLFよう

package
{
	import flash.display.Sprite;
	import flash.geom.Rectangle;
	import flash.text.engine.FontLookup;
	import flash.text.engine.RenderingMode;
	import flash.text.engine.TextLine;
	
	import flashx.textLayout.factory.StringTextLineFactory;
	import flashx.textLayout.formats.TextLayoutFormat;
	
	[SWF(width="400", height="400",frameRate="30",backgroundColor="0xffffff")]
	public class SDK4CFF extends Sprite
	{
		//Unicode Range Basic Latin
		[Embed(source='A-OTF-FutoGoB101Pro-Bold.otf',
			   fontFamily = "MyFutogo", 
			   embedAsCFF = "true",
			   unicodeRange = "U+0020-002F,U+0030-0039,U+003A-0040,U+0041-005A,U+005B-0060,U+0061-007A,U+007B-007E",
        	   mimeType='application/x-font'
     	)]
		private var _myFontClass:Class;
		
		public function SDK4CFF()
		{
			var cf:TextLayoutFormat = new TextLayoutFormat();
			cf.fontSize = 21;
			cf.fontFamily = "MyFutogo";
			cf.fontLookup = FontLookup.EMBEDDED_CFF;
			cf.renderingMode = RenderingMode.CFF;
			var factory:StringTextLineFactory = new StringTextLineFactory();
			factory.text = "Hello embed font!";
			factory.compositionBounds = new Rectangle(30, 30, 200, 50);
			factory.spanFormat = cf;
			factory.textFlowFormat = cf;
			factory.createTextLines(onTextLineCreated);
		}
		
		private function onTextLineCreated(tl:TextLine):void
		{
			addChild(tl);
		}
	}
}

embedAsCFFをtrueにする。

と、これでFlexでフォントを埋め込む方法がわかってよかった。

LINEで送る
Pocket

[AS3] Flex SDKのfontswfを使って埋め込み処理を簡略化する

2011/07/10

埋め込みの公式を見ていたら便利そうなツールを発見しました。

>> Using the fontswf utility

コマンドラインから埋め込み処理ずみのswfを作ってくれるというものです。
おお、結構便利。

macでどうやって使うのかなと思ったら、コマンドの最初に
./
の文字をつけないと認識しなかったです。.はカレントディレクトリの意味です。

だから terminalを起動して

cd "/Applications/Adobe Flash Builder 4.5/sdks/4.5.1/bin"

とbinフォルダまで移動。スペースがパスの間にはさむときは「”」ではさむのを忘れない。

./fontswf オプション 埋め込みフォントへのパス

とすれば良いです。

各オプションは

-a, -alias name
フォントのエイリアス名、デフォルトはフォントのファミリーネーム

-b, -bold
ボールドフェースを埋め込み

-i, -italic
イタリックフェースを埋め込み

-o, -output file_path
書き出し場所のパスを指定(最後はxx.swfとしておくとよいです)

-u, -unicode-range range
unicodeの範囲指定。デフォルトは全部の範囲。

-3
Flex3までのTextFieldに向けての埋め込み

-4
CFF=trueのFlex4(Flash Player10向け)での埋め込み。-3とではこっちがデフォルト

となっています。
unicodeの指定を漢字第一水準までの長いやつにしようとすると、terminalからだと
動作が重くなってしまうので、コマンドをテキストファイルにして、terminalから
シェルスクリプトとして実行するといい感じになりました。

こんなテキストファイルを作って
これをbinの一個上のフォルダにおきます。
binにおいてもいいのだけど、大事なものに混ざっちゃうのはいやなので、そうしました。

terminalから

cd /Applications/Adobe Flash Builder 4.5/sdks/4.5.1

と打って、(さっきのbinからだったら、cd ../ でもOK)
テキストファイルの位置に移動

テキストファイルの最後の部分に

-a Myfont -o /Users/foo/temp.swf /Users/foo/A-OTF-FutoGoB101Pro-Bold.otf

と書いてあります。
ここがさきほどのオプションの部分です。
Myfont は自分で決める書き出し用のシンボル名なので、com.foo.BarFont とかしてもOKです。

-o に続く/Users/foo/temp.swfが書き出しファイル名
最後の/Users/foo/A-OTF-FutoGoB101Pro-Bold.otfがフォントの場所

この辺は環境に応じて適宜かえます。

それで、terminal上から

sh MyEmbedCommand

とうてば、埋め込み済みのswfが完成します。
たくさん埋め込むときには、名前の部分をかえればいいだけなので、楽かも。

使うときは、Embedでまずswfを埋め込みます。
Loader使ってもいいみたいなので、気になる人はググるといいかも。

		[Embed(source="temp.swf",symbol="Myfont")]
		private var _fontClass:Class;

symbolの部分がさきほどの-aオプションの部分でつけた名前です。
ひもづけられる_fontClassの部分は適当に。実際には使わないです。

			var cf:TextLayoutFormat = new TextLayoutFormat();
			cf.fontSize = 48;
			cf.fontFamily = "Myfont";

とかやれば、無事にcffのフォントとして認識されます。
埋め込みでcffじゃなく前のバージョンでやりたいときは、下のページで紹介されてます。
基本はやり方一緒です。-a のところと symbol のところがポイント。

>> FontSwf Utility in FLEX SDK 4

LINEで送る
Pocket

ページトップへ戻る