無理やりフォントを読み込む
前回の記事でクロスドメインで読み込んだswfの埋め込みフォントをregisterFont出来ないと書いたが、バイナリとしてswfを読み込んでfontを取り出しているDenis Kolyako氏という方がいました。
http://etcs.ru/blog/as3/fontloader/
キリル文字で書かれてるのでサッパリ何が書いてあるのかわかりませんが、Demoページもソースも公開されていますのでなんとかなるでしょう。
| Print article | This entry was posted by motoki on 12月 30, 2008 at 4:07 pm, and is filed under ActionScript. Follow any responses to this post through RSS 2.0. You can leave a response or trackback from your own site. |
No comments yet.
No trackbacks yet.
e4x: XMLの要素を検索・フィルタリングする方法
about 1 month ago - No comments
E4Xは非常に強力なのでXMLから値を検索したり、特定の値を持つ要素をとり除くたりといった処理が簡単にできます。 package { import flash.display.Sprite; /** * … * @author Motoki Matsumoto */ public class E4XFiltering extends Sprite { private var _xml:XML = <books xmlns = "http://book/namespace/" xmlns:p = "http://parson/namespace/" > <book name="PHPで作る携帯サイトデベロッパーズガイド" price ="3150"> <author> <p:parson p:name="滝下 真玄" uri="http://blog.ecworks.jp/" /> </author> </book> <book name="PHP×携帯サイト 実践アプリケーション集" price="2940"> <author>株式会社マイネット・ジャパン</author> <author> <p:parson p:name="平島 浩一郎" /> </author> <author>
AS3オブジェクトからそのクラスの参照を取得する
about 1 month ago - No comments
もしオブジェクトからそのクラスの参照が必要な場合、関数flash.utils.getQualifiedClassNameでクラス名を取得、 flash.utils.getDefinitionByNameにクラス名を渡して、クラスへの参照を得る。 package { import flash.display.Sprite; import flash.utils.getQualifiedClassName; import flash.utils.getDefinitionByName; /** * … * @author Motoki Matsumoto */ public class GetClassRef extends Sprite { public static const TEST_MESSAGE:String = "foobar"; public function GetClassRef() { super(); var s:Sprite = new Sprite(); var cls:Class = getClass(s); } private function getClass( obj:* ):Class { return getDefinitionByName( getQualifiedClassName(obj)) as
XML.removeChildは何処?
about 8 months ago - No comments
え、removeChild()ってないの? XML DOMにはappendChild()、removeChild()というメソッドでノードに子要素を追加・削除を行うことができますが、AS3のXMLにはremoveChild()メソッドがありません。appendChild()メソッドがあるのに、え?なんで?って気持ちにさせられた人もきっと多いでしょう。 livedocでXMLの解説をよんでみると、appendChild()メソッドの説明に「指定された子を XML オブジェクトのプロパティの最後に追加します。」と書いてあります。つまり、子はDOMでいうXMLノードではなく、オブジェクトの”プロパティ”として追加されます。 なので、DOMのremoveChild()のように子要素を削除するには、オブジェクトからプロパティを削除するような処理を行えばいいということになります。オブジェクトからプロパティを削除するには、delete演算子を使用します。(deleteで削除できるのは動的に追加されたプロパティのみ)。delete演算子はXMLListオブジェクトに対して用いると、複数の要素や属性を削除できます。 XML要素・属性の削除サンプル XMLにはremoveChild()は無いよ。 – wonderfl build flash online removeChild()メソッドを作るとしたら private function removeChild(node:XML):XML{ var p:XML; if(node != null){ if( (p = node.parent()) ){ delete p.children()[node.childIndex()]; } } return node; }
ドメイン外から読み込んだ埋め込みフォントはregisterFontできないっぽい
about 1 year ago - No comments
クロスドメインで読み込んだswfから埋め込みフォントはregisterFontできないっぽい。 Fontクラスを参照しようとすると59行目でエラーとなる。
利用可能なフォントをリストアップ
about 1 year ago - No comments
Wonderflを試すってことで、利用可能なフォントをリストアップするサンプル。 利用可能なフォントはFont.enumerateFonts()によりFontを要素とする配列が得られる。配列には得埋め込みフォントしか含まれていないが、Font.enumerateFonts()の引数にtrueを渡すとDeviceフォントも配列に含まれるようになる。
Embedメタデータタグで埋め込んだSWF内のクラスにアクセス その2
about 1 year ago - No comments
前の記事では、LoaderクラスのloadBytesを使ってアセットを読み込んだが、次のような書き方もできるようです。 package { import flash.display.Loader; import flash.display.LoaderInfo; import flash.display.MovieClip; import flash.events.Event; import mx.core.MovieClipAsset; public class AllowDomainSample extends MovieClip { [Embed(source="../assets/preloader.swf")] private var _embedAssets:Class; private var _mov:MovieClipAsset; private var _flag:Boolean = false; public function AllowDomainSample() { trace(’constructor’, _flag); super(); _mov = new _embedAssets() as MovieClipAsset; Loader(_mov.getChildAt(0)).contentLoaderInfo.addEventListener(Event.INIT, initHandler); } private function initHandler(event:Event):void{
Embedメタデータタグで埋め込んだswf内のクラスにアクセス
about 1 year ago - No comments
Embedメタデータタグをつかってswfをアセットとして埋め込んだ場合、MoviceClipAssetクラスとして扱われる。ここによると 埋め込んだ SWF ファイルのプロパティまたはメソッドに直接アクセスすることはできません。 ただし、 LocalConnection を使用してアクセスすることはできます。 なんてことが書いてあるので、Flashで書きだしたswfのクラスにアクセスするにはembedは使えないなんて思ってました。しかし、skinner氏がUsing Flash Symbols with Actionscript in Flexという記事で”Shake’n'Bake SWFs”と名付けた方法でEmbedメタデータタグで埋め込んだSwfからクラス定義を取り出す方法を紹介している。 なーるほどっ、バイナリとして埋め込んでloadBytesで読み込むわけですね。 アセットの埋め込みについてに記載があるとおり、mimetypeにapplication/octet-streamの指定を行えばバイナリとして埋め込まれるようです。 この方法、結構、定石なんですかね。 備考としては、loadBytesでロードしたswfはセキュリティドメインに読み込まれるので, AIRの場合にセキュリティ的にアカン(Ted Patrick: Loader.load vs Loader.loadBytew)ってことになったので、実行可能なコードを読み込む場合はloadBytesにallowLoadBytesCodeExecutionをtrueに設定したLoaderContextを渡す必要があります。 サンプル package { import flash.display.Loader; import flash.display.LoaderInfo; import flash.display.MovieClip; import flash.events.Event; import flash.system.LoaderContext; import mtok.sample.ProgressBar; /** * … * @author DefaultUser (Tools -> Custom Arguments…) */ public class LoadBytesSample
sugarcookie メモその2
about 1 year ago - No comments
続いて、ViewStackおよび、Viewについて、この2つのクラスは表示に関する処理をおこなうもので、通常、それぞれのクラスを継承したサブクラスで必要な処理を実装する。 ViewStackクラスのサブクラスでオーバーライドを行うメソッド init() コンストラクタ内で呼び出される、ここでViewクラスのインスタンスをregisterViewで追加してやる。 onAdded() ステージに追加されたときに呼び出される queueIntro() config.xmlでhasIntroがtrueの場合、イントロが存在するとみなされて、queueIntro()が呼び出される。queueIntro()ではイントロを開始する処理を行う。イントロ終了後はcontinueAfterIntro()を呼び出してイントロ終了後の処理を開始する。initDisplay()はそのままだと呼び出されないので必要があれば、initDisplay()を呼び出す。 initDisplay() おまかせ。 preTransitionHandler() SWFAddressのonChange発生じに呼び出され、トランジションが始まる前 postTransitionHandler トランジションが終了してViewが表示された後 makeTrackingCall トラッキングコール onProgressHandler() 必要に応じて onProgressComplete 必要に応じて Viewクラスでオーバーライドするメソッド onShow() Viewを表示させるトランジションをスタート。トランジション終了時にonShowComplete()を呼ぶ onHide() Viewを非表示にするトランジションをスタート。トランジション終了時にonHideComplete()を呼ぶ reset() Viewをリセット。他のViewが表示されるときに呼び出される。 onAdded() ステージに追加されたときに呼び出される
sugarcookieメモその1
about 1 year ago - No comments
sugarcookieというフレームワークが、映画007の新作Quantum Of Solace(邦題:慰めの報酬)のHPに使用されているみて興味がでたので、ちょっとメモを取りつつコード読み。 SVNからソースを入手する SVNからソースをダウンロードする。ディレクトリ構造は以下の通り。(Rev.152) sugarcookie ├─ant_scripts │ ├─docs │ │ └─asdoc-output │ └─sugarcookie ├─as2 │ └─sugarcookie │ ├─adapters │ ├─browser │ ├─collections │ ├─dataHandlers │ ├─encryption │ ├─events │ ├─file │ ├─framework │ │ └─vo │ ├─logger │ ├─number │ ├─tracking │ ├─tween │ ├─ui │ ├─utils │ ├─validators │ └─video ├─as3 │ └─sugarcookie-framework
AS3のYAMLライブラリ
about 1 year ago - 1 comment
AS3むけのYAMLライブラリがないかなと探してみたら、as3yamlというライブラリがGoogle Codeで公開されていた。 Kirill SimonovのPython向けライブラリPyYAMLをAS3に移植したものらしい。 現在どの程度の完成度なのかちょっと解らないが、yamlドキュメントのデコード・エンコードは十分できるような感じ。 as3yaml – Google Code デコード YAMLをデコードしてするには、decode()もしくは、load()メソッドを使用する。 decode()にYAML文字列を渡すと、パースされたオブジェクトが得られる。load()メソッドはdecode()メソッドに加えてより細かい設定が可能。 デコードによって得られるオブジェクトの型はデコードするYAMLによって変わり、DictionaryかArrayのどちらかが生成される。 var obj:Object; var s:String = new String( "Profile:\n" + " Name: Taro\n" + " Age: 10\n" + " City: Tokyo\n" + " Zip: 101-1234\n" + " Friends:\n" + " – Jiro\n" + " – Goro\n" ); obj = YAML.load(s, new DefaultYAMLFactory(),