- 2010.08.22 Sunday
- Adobe Flash CS4 ACE Exam [ENG]に 合格しました。
-
わーい!
Adobe Flash CS4 ACE Exam [ENG]に 合格しました。
英語試験しかないので たいして英語に自信とかあるわけでもないのでちょっと不安でしたが
無事合格しました。。 - | whaison | ActionScript3.0 | 14:07 | comments(0) | - | pookmark |
- 2010.08.18 Wednesday
- FlashDevelopでフォント埋め込み
-
FlashDevelopでフォント埋め込み 検索すると沢山でてくるけど。
いろんなところのサンプルとか使ってもなぜか埋め込みできなかったので
ハマった。
でもやっとハマらないパターンをまたqfilmsの中で見つけた、
FontAsset;//これが意味がわからなかったけど
importしても classへの参照がないとコンパイル時に消えちゃうって事らしい。
※それ以外になぜか埋め込みできない状況になることがflexSDK4.1だとなぜかあって、
FlexSDKを3まで戻したら使えるように戻った。
埋め込みできた環境
FlashDevelop3.2.2RTM
ツール環境設定>AS3 Context Flex SDK Location
C:¥flex_sdk_3
プロジェクト設定>書き出し>プレーヤーバージョン設定
flashplayer9 -OK
flashplayer10 -OK
flashplayer10.1-なぜ出てくる? -OK
なんかちがうらしくて。
C:¥flex_sdk_4のときは
FlashPlayer 10 は新しいテキストエンジン (FTE/Flash Text Engine) が搭載された影響で
Embedの書き方が違うらしい。
http://blog.kaihatsubu.com/archives/001697.html
package { public class FontAsset { // if you want to embed font, add font to folder and out under line. //FlexSDK3 //[Embed(source="/assets/Bebas.ttf", fontName="myfont")] //FlexSDK4 [Embed(source="/assets/Bebas.ttf", fontName="myfont", embedAsCFF='false')] private var font:Class; public function FontAsset() { trace("----------FontAsset------------") // throw new Error("you cannot create FontAsset Class instance") } } }
package { import flash.display.Sprite; import flash.events.Event; import flash.text.AntiAliasType; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; import FontAsset; /** * ... * @author */ public class Main extends Sprite { private var textField:TextField; public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point textField = new TextField(); textField.selectable = false; textField.mouseEnabled = false; textField.autoSize = TextFieldAutoSize.LEFT; // if you use embed font, please comment out textField.embedFonts = true; textField.x = 10; textField.y = 1; addChild(textField) var textFormat:TextFormat = new TextFormat(); textFormat.font = "myfont"; textFormat.bold = true; textFormat.size = 48; textField.antiAliasType = AntiAliasType.ADVANCED; textField.defaultTextFormat = textFormat; textField.text = "ABCDEF" var font:FontAsset=new FontAsset(); } } }
- | whaison | ActionScript3.0 | 21:05 | comments(1) | - | pookmark |
- 2010.07.28 Wednesday
- 外部埋め込みフォントのロードと使用
-
外部埋め込みフォントのロードと使用
FontAssetクラスとEmbedFontクラスで EmbedFont.swfをつくります。
package { public class FontAsset { // if you want to embed font, add font to folder and out under line. //[Embed(source="/assets/font/MyriadWebPro.ttf", fontName="myfont", fontWeight="Semibold")] [Embed(source="/assets/mplus-1c-black.ttf", fontName="myfont")] public var font:Class; public function FontAsset() { // throw new Error("you cannot create FontAsset Class instance") } } }
package { import flash.display.Sprite; import flash.events.Event; import flash.text.Font; import FontAsset; /** * 埋め込みフォントが入った SWF * @author Hikipuro */ public class EmbedFont extends Sprite { /** * 埋め込みフォント */ //[Embed(source='../font/mplus-1c-black.ttf', fontName='mplus-1c-black')] //private var embedFont1:Class; private var fontins:FontAsset; /** * コンストラクタ */ public function EmbedFont():void { //FontAsset; fontins=new FontAsset() } /** * 埋め込みフォントを取得する */ public function get font():Class { return fontins.font; } } }
それであとはHikipurosanのClassLoaderクラスでとMainクラスで読み込みますと。。。
package { import flash.display.Loader; import flash.display.LoaderInfo; import flash.errors.IllegalOperationError; import flash.events.Event; import flash.events.EventDispatcher; import flash.events.HTTPStatusEvent; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; import flash.events.SecurityErrorEvent; import flash.net.URLRequest; import flash.system.ApplicationDomain; import flash.system.LoaderContext; /** * ロード操作が開始した時に発行するイベント * @eventType flash.events.Event.OPEN */ [Event(name = "open", type = "flash.events.Event")] /** * unload() メソッドを使用して削除されるたびに発行するイベント * @eventType flash.events.Event.UNLOAD */ [Event(name = "unload", type = "flash.events.Event")] /** * ダウンロード処理を実行中にデータを受信した時に発行するイベント * @eventType flash.events.ProgressEvent.PROGRESS */ [Event(name = "progress", type = "flash.events.ProgressEvent")] /** * クラスのロードが完了した時に発行するイベント * @eventType flash.events.Event.COMPLETE */ [Event(name = "complete", type = "flash.events.Event")] /** * ロードされた SWF ファイルのプロパティおよびメソッドがアクセス可能で使用できる状態になった時に発行するイベント * @eventType flash.events.Event.INIT */ [Event(name = "init", type = "flash.events.Event")] /** * ロードされた SWF ファイルのプロパティおよびメソッドがアクセス可能で使用できる状態になった時に発行するイベント * @eventType flash.events.HTTPStatusEvent.HTTP_STATUS */ [Event(name = "httpStatus", type = "flash.events.HTTPStatusEvent")] /** * クラスのロードに失敗した時に発行するイベント * @eventType flash.events.IOErrorEvent.IO_ERROR */ [Event(name = "ioError", type = "flash.events.IOErrorEvent")] /** * ロード時にセキュリティエラーが発生した時に発行するイベント * @eventType flash.events.SecurityErrorEvent.SECURITY_ERROR */ [Event(name = "securityError", type = "flash.events.SecurityErrorEvent")] /** * 外部 SWF ファイルからクラスをロードするためのクラス * * ・このクラスの詳細 * http://livedocs.adobe.com/flex/3_jp/langref/flash/system/ApplicationDomain.html#includeExamplesSummary * @author Hikipuro */ public class ClassLoader extends EventDispatcher { /** * SWF ファイルをロードするためのローダ */ private var loader:Loader; /** * SWF ファイルの URL */ private var url:String; /** * ローダの URLRequest */ private var request:URLRequest; /** * ロードされたクラス */ private var loadedClass:Class; /** * コンストラクタ */ public function ClassLoader() { var loaderInfo:LoaderInfo; // イベントリスナの登録 loader = new Loader(); loaderInfo = loader.contentLoaderInfo; loaderInfo.addEventListener(Event.OPEN, openHandler); loaderInfo.addEventListener(Event.UNLOAD, unloadHandler); loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler); loaderInfo.addEventListener(Event.COMPLETE, completeHandler); loaderInfo.addEventListener(Event.INIT, initHandler); loaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler); loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); loaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); } /** * SWF をロードする * @param lib SWF ファイルの URL */ public function load(url:String):void { this.url = url; request = new URLRequest(url); var context:LoaderContext = new LoaderContext(); context.applicationDomain = ApplicationDomain.currentDomain; loader.load(request, context); } /** * クラス名からクラスを取得する * @param className クラス名 * @return */ public function getClass(className:String):Class { try { var loaderInfo:LoaderInfo; var applicationDomain:ApplicationDomain; loaderInfo = loader.contentLoaderInfo; applicationDomain = loaderInfo.applicationDomain; loadedClass = applicationDomain.getDefinition(className) as Class; return loadedClass; } catch (e:Error) { throw new IllegalOperationError(className + " definition not found in " + url); } return null; } /** * イベントハンドラ * ロード操作が開始したときに送出されます。 * @param e */ private function openHandler(e:Event):void { dispatchEvent(e); } /** * イベントハンドラ * ロードされたオブジェクトが Loader オブジェクトの unload() メソッドを使用して削除されるたびに、 * LoaderInfo オブジェクトによって送出されます。または 2 番目のロードが同じ Loader オブジェクトによって実行され、 * ロード開始前に元のコンテンツが削除された場合に、LoaderInfo オブジェクトによって送出されます。 * @param e */ private function unloadHandler(e:Event):void { dispatchEvent(e); } /** * イベントハンドラ * ダウンロード処理を実行中にデータを受信したときに送出されます。 * @param e */ private function progressHandler(e:ProgressEvent):void { dispatchEvent(e); } /** * イベントハンドラ * データが正常にロードされたときに送出されます。 * @param e */ private function completeHandler(e:Event):void { dispatchEvent(e); } /** * イベントハンドラ * ロードされた SWF ファイルのプロパティおよびメソッドがアクセス可能で使用できる状態の場合に送出されます。 * @param e */ private function initHandler(e:Event):void { dispatchEvent(e); } /** * イベントハンドラ * ネットワーク要求が HTTP を介して行われ、HTTP ステータスコードを検出できる場合に送出されます。 * @param e */ private function httpStatusHandler(e:HTTPStatusEvent):void { dispatchEvent(e); } /** * イベントハンドラ * 入出力エラーが発生してロード処理が失敗したときに送出されます。 * @param e */ private function ioErrorHandler(e:IOErrorEvent):void { dispatchEvent(e); } /** * イベントハンドラ * ローダでセキュリティエラーが起こった時 * @param e */ private function securityErrorHandler(e:SecurityErrorEvent):void { dispatchEvent(e); } } }
package { import ClassLoader; import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.SecurityErrorEvent; import flash.net.URLRequest; import flash.text.Font; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFieldType; import flash.text.TextFormat; /** * 実行時に埋め込みフォントをロードするサンプル * @author Hikipuro */ public class Main extends Sprite { /** * ロードする SWF ファイルの URL */ private const url:String = "EmbedFont.swf"; /** * 外部 SWF ファイルの中からクラスを取得するためのオブジェクト */ private var loader:ClassLoader; /** * メッセージ表示用テキストフィールド */ private var textField:TextField; /** * コンストラクタ */ public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } /** * 初期化イベント * @param e */ private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point // テキストフィールドの初期化 textField = new TextField(); //textField.autoSize = TextFieldAutoSize.LEFT; textField.type = TextFieldType.INPUT; textField.x = 5; textField.y = 5; textField.width = 310; textField.height = 230; textField.border = true; textField.borderColor = 0xC0C0C0; textField.multiline = true; textField.wordWrap = true; textField.text = ""; addChild(textField); // 使用可能なフォントの一覧を取得する var fontArray:Array = Font.enumerateFonts(true); // テキストフィールドの初期メッセージを設定 textField.appendText("実行時にうめ込みフォントをロードするサンプル¥n¥n"); textField.appendText("SWF ロード前の使用可能フォントの数 : " + fontArray.length + "¥n"); // SWF ファイルのロード loader = new ClassLoader(); loader.addEventListener(Event.COMPLETE, onLoadComplete); loader.addEventListener(IOErrorEvent.IO_ERROR, onLoadError); loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onLoadError); loader.load(url); } /** * クラスのロード時にエラーが発生した時 * @param e */ private function onLoadError(e:Event):void { trace("onLoadError"); textField.text = "SWF ファイルのロードに失敗しました。"; } /** * クラスのロードが完了した時 * @param e */ private function onLoadComplete(e:Event):void { trace("onLoadComplete"); // ロードした SWF ファイルから、クラスをロードしてインスタンス化する var classRef:Class = loader.getClass("EmbedFont"); var externalObject:Object = new classRef(); // 外部の SWF ファイルから埋め込みフォントを取得して、 // 親 SWF (今コードを書いている SWF) に登録する var font:Font = new externalObject.font; Font.registerFont(externalObject.font); // 使用可能なフォントの一覧を取得する var fontArray:Array = Font.enumerateFonts(true); // テキストフィールドの内容を更新 textField.appendText("SWF ロード後の使用可能フォントの数 : " + fontArray.length + "¥n"); // テキストフォーマットの作成 var format:TextFormat = new TextFormat(); format.font = font.fontName; format.size = 20; // ロードした埋め込みフォントをテキストフィールドに適用する textField.setTextFormat(format); textField.embedFonts = true; } } }
- | whaison | ActionScript3.0 | 22:47 | comments(0) | - | pookmark |
- 2010.06.29 Tuesday
- FlvPlayback コンポーネントを使うときはカスタムUIを使うべしらしい。
-
FlvPlayback コンポーネントを使うときはカスタムUIを使うべしらしい。
1. FlvPlayback?のスキンを「なし」にする
2. カスタムUIコンポーネントをドラッグ&ドロップして配置していく
これだけなんだって。インスタンスの登録をしなくても勝手に動作してくれる。 スーパー肩パッドさんの受け売りだけど 個人的にちょーぐっときたので。
FLVPlayback: スーパー肩パッドの「Flashセレブ道」wiki
あともういっこスキンをカスタマイズするflaは
ここにvideoのコンポーネントのflaがはいってるみたいですね。
C:¥Program Files¥Adobe¥Adobe Flash CS4¥Common¥Configuration¥FLVPlayback Skins¥FLA¥ActionScript 3.0¥SkinUnderPlayStopSeekMuteVol.fla
みたいに
それでスキンの参照でいいのかなあ。。 やってないけど
- | whaison | ActionScript3.0 | 14:10 | comments(0) | - | pookmark |
- 2009.11.25 Wednesday
- sparkのBetweenAS3 の 日本語訳だょ
-
BetweenAS3
BetweenAS3 入門・・が結構ハマった Overwrite と助けてもらったサイトなど - mrhdms
でいろいろわかりました。
BetweenAS3 Alpha r3022 出来たよ-Beinteractive
ここからもダウンロードできた - | whaison | ActionScript3.0 | 15:41 | comments(0) | - | pookmark |