投稿

ラベル(Flex Coding Tips)が付いた投稿を表示しています

ChromeのFlash(PPAPI)のSharedObjectの場所

Chrome内蔵のFlash(PPAPI版)のSharedObjectは通常のFlash(NPAPI版)とは保存場所が異なるのでまとめておこうと思う。 PPAPI /Users/ユーザー名/Library/Application Support/Google/Chrome/Default/Pepper Data/Shockwave Flash/WritableRoot/#SharedObjects/英数字/サイト名/ (Mac) C:\Users\ユーザー名\AppData\Local\Google\Chrome\User Data\Default\Pepper Data\Shockwave Flash\WritableRoot\#SharedObjects\英数字\サイト名\ (Windows 7) またまた深〜いところにありますなぁ。ちなみにNPAPI版の場所も改めて。 NPAPI /Users/ユーザー名/Library/Preferences/Macromedia/Flash Player/#SharedObjects/英数字/サイト名/ (Mac) C:\Users\ユーザー名\AppData\Roaming\Macromedia\Flash Player\#SharedObjects\英数字\サイト名\ (Windows 7)

Flash Player 10レベルだとBitmapFilterにもサイズ制限があることを思い出した・・・

先ほどFP10レベルだと画像のサイズ制限があることを書いた。 琴線探査: Flash Player 10レベルで1辺2880ピクセル以上の画面キャプチャーを撮るには? しかし、この制限を受けるのは画像だけではなかった。BitmapFilter系にも関係するということを思い出した・・・ 問題が出ると、このような警告がコンソールに表示される。 警告 : Filter はレンダリングされません。描画するには DisplayObject のフィルターサイズ (4109, 4109) が大きすぎます。 4,109 * 4,109 = 16,883,881 確かに、FP10の最大ピクセル数16,777,215を僅かにオーバーする(^^); なら正方形だとどこまで大きくできるのか? 16,777,215のルートを取ればいい。つまり4,095だ。これなら、 4,095 * 4,095 = 16,769,025 なのでオーバーしない。 BitmapFilter系にはBevelFilter, BlurFilter, ColorMatrixFilter, ConvolutionFilter, DisplacementMapFilter, DropShadowFilter, GlowFilter, GradientBevelFilter, GradientGlowFilter, ShaderFilterがある。 BitmapFilter - ActionScript 3.0 言語およびコンポーネントリファレンス 影響デカイ。早いとこFP11レベルに上げないと、これ以上のスペックアップはもう無理ポ。

Flash Player 10レベルで1辺2880ピクセル以上の画面キャプチャーを撮るには?

Flexで画面のキャプチャーを撮るにはこうするだろう。大抵はこれで上手くいく。 var bmpSrc:BitmapData = ImageSnapshot.captureBitmapData(this, null, null, null, null, true); しかし、1辺が2880ピクセルを超えるキャプチャーを取ろうとすると、なぜか2880ピクセルに縮小されてしまう。 原因は間違いなく、ImageSnapshotだ。ソースをみると、こんなコードがあるんだ・・・ ・・・ public static const MAX_BITMAP_DIMENSION:int = 2880; ・・・ // Cap width to BitmapData max of 2880 pixels if (scaledWidth > MAX_BITMAP_DIMENSION) { reductionScale = scaledWidth / MAX_BITMAP_DIMENSION; scaledWidth = MAX_BITMAP_DIMENSION; scaledHeight = scaledHeight / reductionScale; matrix.a = scaledWidth / width; matrix.d = scaledHeight / height; } ・・・ それなら、ImageSnapshotをextendsしてオーバーライドするか・・・と思ってこうしてみた。 public override static const MAX_BITMAP_DIMENSION:int = 8191; しかし、コンパイルが通らない。そういえば、「AS3では、staticメソッドを継承することもオーバーライドすることも出来ません。」だった_| ̄|○ AS3では、staticメソッドを継承することもオーバーライドすることも出来ません。 - hirossy javaとFlex2と。 こりゃダメかな・・・と思ったが、extendsするのではなく、このように新しいクラスを作って必要なメソッドを移植して定数の部分に適当な値を与えてやると、とりあえず1辺が2880を超える画像をキャプチャーできるようにはなった。 ...

AS3のYouTubeアプリでセキュリティエラーが出始めたら、このドメインのポリシーファイルをロードしてみよう

AS3のYouTubeアプリでセキュリティエラーが出始めたら、このようにドメインのポリシーファイルをロードしてみよう Security.loadPolicyFile("http://lh3.googleusercontent.com/crossdomain.xml"); Security.loadPolicyFile("http://lh4.googleusercontent.com/crossdomain.xml"); Security.loadPolicyFile("http://lh5.googleusercontent.com/crossdomain.xml"); Security.loadPolicyFile("http://lh6.googleusercontent.com/crossdomain.xml"); 作者の情報のロードをする時になぜかエラーが出る。Google+とYouTubeの作者プロフィールの統合による影響だと思われる。 問題はこれだけロードすれば十分かどうかだけど、分からない。lh1,lh2は無し。lh7-lh10も無かった。それ以上は調べていない。 Google+のおかげで面倒なことになったもんだ(^^); ちなみに、これまでに読み込んでいる他のポリシーファイル。 Security.loadPolicyFile("http://i.ytimg.com/crossdomain.xml"); Security.loadPolicyFile("http://i1.ytimg.com/crossdomain.xml"); Security.loadPolicyFile("http://i2.ytimg.com/crossdomain.xml"); Security.loadPolicyFile("http://i3.ytimg.com/crossdomain.xml"); Security.loadPolicyFile("http://i4.ytimg.com/crossdomain.xml"); Security.loadPolicyFile...

AndroidにおけるAIRアプリとネイティブアプリのメモリ使用量の差を調べる

イメージ
AndroidにおけるAIRアプリとネイティブアプリの最低メモリ使用量の差を調べておきたい。 感覚的にはもちろんネイティブアプリの方が少ないだろうと思うのだけど、どれだけ違うのかをハッキリさせておきたい。 今回つくるアプリは、画面にボタンを表示するだけのアプリ。最低限の機能にすることで、より最低メモリ使用量に近い値を得たいため。実機はGalaxy Tabを使った。 まずはネイティブアプリ。APKは約13Kバイト。実行画面はこんな感じ。 メモリ使用量は? なるほど。2.86MBか。CPUの使用率もしばらく見てたけど、ずっと0%だった。 次はAIRアプリ。「Flex モバイルプロジェクト」で作成し、Captive Runtimeなしでリリースビルドした。APKは約538KBバイト。実行画面はこんな感じ。 メモリ使用量は? 24.37MBも食っている。CPU使用率は0.33%〜0.66%を行ったり来たりして、0%になることはまれだった。何やってるんだろ? まとめると <ファイルサイズ> AIRアプリはネイティブの約41倍(AIR:538KB - ネイティブ:13KB) >AIRアプリはネイティブアプリよりもファイルサイズが大きくなる傾向 <メモリサイズ> AIRアプリはネイティブの約8.5倍(AIR:24.37MB - ネイティブ:2.86MB) >AIRアプリはネイティブアプリよりもより多くのメモリを消費する傾向 <CPU使用率> AIRアプリはバックグラウンドでも微妙にCPUを食っている >AIRアプリはネイティブアプリよりもバッテリーを消費するかもしれない傾向 やっぱり感覚は正しかった。 残念ながら、AIRアプリはいわゆる「重い」と言わざるを得ない。

現状でのモバイルFlash開発は、残念ながら「Painである」と言わざるを得ない

イメージ
例えば、モバイルFlashではListアイテムのドラッグ&ドロップはサポートされない_| ̄|○ まず、ドキュメントにそう書いてある。 spark.components.List - Adobe® Flash® Platform 用 ActionScript® 3.0 リファレンスガイド ・・・ dragEnabled プロパティ ・・・ interactionMode が touch に設定されているモバイルデバイスでは、ドラッグ&ドロップがサポートされていません。 ・・・ マジかよ?と思って、このようにやってみた。 /** * アカウント並べ替えボタンクリック時 * */ protected function onClickBtnOrganizeAccount():void { trace("onClickBtnOrganizeAccount() w=" + listAccount.width + " h=" + listAccount.height); currentState = "organize"; listAccount.setStyle("interactionMode", "mouse"); listAccount.dragEnabled = true; listAccount.dragMoveEnabled = true; listAccount.dropEnabled = true; listAccount.itemRenderer = new ClassFactory(AccountSortItemRenderer); } /** * アカウント並べ替え終了ボタンクリック時 * */ protected function onClickBtnOrganizeDone():void { trace("onClickBtnOrganizeDone() w=" + listAccount.width + " h=" + listAccount.height); currentState = ...

モバイルFlashではregisterClassAlias()が使えない?

モバイルFlash開発で、カスタムクラス型をSharedObjectに保存しようとして以前のようにregisterClassAlias()を使うも、どうしてもnullになる。 琴線探査: FlexでSharedObjectにカスタムクラス型を保存するには? カスタムクラスはpublicなStringのプロパティーを2つ持っているだけ。getterもsetterもfunctionも無し。 package { public class TestClass { public var name:String; public var url:String; public function TestClass() { } } } テストプログラムも超簡単。ApplicationCompleteのイベントのところでこのようにした。 protected function onApplicationComplete():void { var so:SharedObject = SharedObject.getLocal("TestApp"); registerClassAlias("TestClass", TestClass); var isWrite:Boolean = true; if (isWrite) { trace("onApplicationComplete() write!"); var tcWrite:TestClass = new TestClass(); tcWrite.name = "jun"; tcWrite.url = "koro"; so.data.tmp = tcWrite; so.flush(); } else { trace("onApplicationComplete() read!"); var tcObj:Object = so.data.tmp; var tcRead:TestCla...

ViewNavigatorの画面開始・終了時の処理をどのタイミングでするべきか?

モバイルFlash(MF)の開発で使われるSparkのViewNavigatorでの画面開始・終了時の処理をどのイベントのタイミングでするべきだろうか? 特に画面開始時の処理のタイミングが問題だ。このタイミングが適切でないと画面の遷移がスムーズに行われず、ユーザーとしては「一瞬画面が止まる」「遅い」「重い」という風に感じてしまうから。 通常のFlex開発だと画面開始時の処理は主にCREATION_COMPLETEイベントのタイミングで行なってきたので、ViewNavigatorでも同様にしてみたけれど、どうも画面遷移が重い気がする。 そこで、Viewのライフサイクルを詳しく調べることにした。このあたりはドキュメントにまとめられていた。 Adobe Flex 4.6 * モバイルアプリケーションでのビューの定義 ドキュメントのフロー図を見ると、どうやらCREATION_COMPLETEではなく、 VIEW_ACTIVATEの時点で行うのが良さそう だ。 なぜなら、CREATION_COMPLETEからVIEW_ACTIVATEまでの間には ・ActionBarの更新 ・トランジション ・元のVIEWを削除 など、様々な処理が行われることになっているから。 これだけ様々な処理が入っている時に、サーバーへのリクエストだのデータのパースだのをしていたら、それは画面遷移が重くなるわけだ。 どれだけ速くなるかはCREATION_COMPLETEイベント時の処理の重さにもよるのだろうけど、実際にやってみたら結構速くなった気がする。 画面終了時の処理はVIEW_DEACTIVATEで行うのが良さそう だ。

AS3で太平洋標準時(PST)を得るには?

昨日は太平洋標準時(PST)について学んだ。 琴線探査: AdSenseの一日の始まりは一体何時なのか? では、AS3でPSTを得るにはどうしたらいいのか? こんな風かな? var MsecPerMin:uint = 1000 * 60; var MsecPerHour:uint = MsecPerMin * 60; //PSTはUTC-8。 //さらに各国のタイムゾーンオフセットも考慮する必要がある。日本の場合はUTC+9。 var date:Date = new Date(); date.setTime(date.time - MsecPerHour*8 + MsecPerMin*date.timezoneOffset); trace("Current Date(PST):" + date); で、このコードのtrace()はこんな風。 Current Date(PST):Thu Feb 16 18:10:14 GMT+0900 2012 で、こちらでこの出力が正しいか確かめてみる。 現在時刻 :: サンフランシスコ, アメリカ合衆国. オンライン時計 サンフランシスコ(San Francisco) - 現地時間, 公式時刻 うん。あってそう(*^^*) タイムゾーンの問題って結構複雑。 日本にはタイムゾーンは1つしか無いから、これまでまったく考えたことなかったけど、アメリカだと6つもあるんだね。これは普通に普段から考えざるを得ない。 しかし、国際化を考えたら、タイムゾーンの問題は避けては通れない問題だね。

AIRでOAuth2認証するには?

イメージ
AIRでAdSenseから取得したデータを表示させてみようと思った。 Getting Started - AdSense Management API - Google Code しかし、そのためにはOAuth2認証を通す必要があるようだ。では、AIRでOAuth2認証するにはどうしたらいいのか? 「API Console」で必要な情報をそろえる まずOAuth2で必要な情報を集めるために、 API Console に逝く。 新しいプロジェクトを作る。ここでは「OAuth2Test」とした。 プロジェクトを作ると自動的に開く「services」で「AdSense Management API」を「ON」する。 「API Access」ページに逝って「Create an OAuth 2.0 client ID」という青くてデカいボタンクリック。 「Product Name」を入力して「Next」。ここでは「OAuth2Test」とした。「Product Logo」は放っておいておk。 「Application Type」として「Installed Application」を選んで「Create client ID」。 すると、 「Client ID」「Client secret」「Redirect URIs」 がもらえる。これらがOAuth2で必要な情報だ。 ユーザーに許可を求めるページを表示して「code」を取得 ユーザーにAdSenseへのアクセスの許可を求めるページを表示して、「code」を取得する必要がある。 そのために、StageWebViewを使う。コードはこんな風。 protected function onClickBtnStartOAuth2():void { swv = new StageWebView(); swv.addEventListener(Event.COMPLETE, onCompleteSWV); function onCompleteSWV(evt:Event):void { const codeSubstringKey:String = "code="; var title:String = ...

Flash Builder 4.6でのiOSアプリ開発を試してみる

イメージ
Flash Builder 4.6でiOSアプリの開発を試してみた。 適当なアプリを作ってデバッグしようとすると、早速つまづいた(^^); 証明書とプロビジョニングファイルの設定 ターゲットでiOSを選んだら、デスクトップ上かデバイス上かを選ぶ。デスクトップ上は何も問題なく起動できる。やはり問題はデバイス上だ。早速「パッケージ化設定がされていません」とエラーが。 そこで「設定」をクリックすると、証明書とプロビジョニングファイルが必要なようだ。 証明書は、「キーチェーンアクセス」を開く>「ログイン」キーチェーンを開く>「証明書」分類で表示される「iPhone Developer: xxx xxx(xxx)」という証明書を右クリックして「書き出す」>「p12」ファイル形式を選んで保存という感じで用意する。 証明書についてはここが参考になる。 Adobe Flash Platform * P12 ファイルへの開発用証明書の変換 プロビジョニングファイルはAppleから発行してもらったXcodeでいつも使っているプロビジョニングファイルでいい。 App IDの設定 とりあえずパッケージ方法で「高速」を選んで起動させようとするとまたエラー。ちなみに、ここで「標準」を選ぶと誇張でなくホントに数分待たされることになる。 プロビジョニングファイルで指定した「App ID」にアプリの設定のどこかを一致させる必要があるらしい。 ならエラーメッセージで教えてくれよと(^^); ホントにエラーダイアログって使えたためしがない。自分も気を付けないと。 一致させるべきは、$PROJECT_HOME/src/XXX-app.xmlの次の箇所。 もしプロビジョニングに「jp.co.xxx.*」とワイルドカードで指定してたなら「jp.co.xxx.Test」など、最後は適当なアプリ名でいい。もしプロビジョニングに「jp.co.xxx.Test」と固定で指定していたなら、その通りに入力する。 IPA(アプリ)をiTunesにインストールして同期(ノ∀`) すると今度はこんなウインドウが出てくる。 要するに、アプリをデバッグするには、まずコンパイル済みのIPAファイルをiTunes>ライブラリ>Appに...

FlexでSharedObjectに大きなデータを保存する時の注意点

イメージ
FlexでSharedObjectにデータを保存する時に、ある程度のデータサイズまでは特に問題はない。 しかし、大きなデータを保存する時には、こんな感じでユーザーに許可を求めるダイアログが自動的に表示される。 これが厄介。 例えばこんなコード。 function saveByteArray(ba:ByteArray):void { var so:SharedObject = SharedObject.getLocal("config", "/"); so.data.bytearray = ba; //ByteArrayが50MB程度と仮定 so.flush(); //この段階でユーザーにローカルストレージに保存する許可を求めるダイアログが表示される } flush()した時点でユーザーにローカルストレージに保存する許可を求めるダイアログが表示される。 ここでユーザーが「拒否」した場合は仕方ない。しかしユーザーが「許可」した場合は保存できるものと期待した。しかし、その期待はハズれた。保存されない! ただ、絶対か?と言われるとそうでもない。調べた限りでは、FP11系ではたまに保存できるし、FP10系ではごくごくたまに保存できる。しかし、この不安定さは保存できないと言っていいと思う。 つまり、 大きなデータを保存する時に、まだユーザーの許可を得ていない状態で保存をすると保存できない ということだ。 逆に言うと、 予め許可を得ていれば保存できる ということでもある。実際、2回目にはちゃんと保存できるのだ。 そこで、 まずはflush()メソッドの引数を使ってわざと大きなデータを保存する「フリ」をする 。許可をもらったら実際に保存する。という処理をすることにした。 書いてみると、意外と('A`)マンドクセな処理だった。 function saveByteArray(ba:ByteArray):void { Alert.show("ローカルストレージへの保存許可をチェックします", "ローカルストレージ保存許可チェック", Alert.OK, null, savePermissionCheck); ...

AIRで動的埋め込みフォントを縦書き表示できるか?

イメージ
結論から言うと、できる! 動的に埋め込みフォントを読み込んで表示することはできた。 琴線探査: AIRで動的に埋め込みフォントを読み込むには? そして、動的埋め込みフォントを表示する場合のクセも掴んだ。 琴線探査: AIRで外部埋め込みフォントを動的に読み込んで表示する時の原因不明の問題 最後の課題は、いかにして動的埋め込みフォントを縦書きで表示するかだ。 確認した限りSpark系のコンポーネントで唯一動的埋め込みフォントを表示できるLabelは、縦書きができないことがわかった。 琴線探査: SparkのLabelは縦書きできない!_| ̄|○ ここで、ひょっとしてSDKのバージョンが上がればRichText系でも表示できるかも知れないと思ったので、FB4.6で同じコードを動かしてみたが、表示できなかった_| ̄|○ Spark系にこだわる必要は無いし、RichText系のコンポーネントで表示できないのも仕方ない。ただ、縦書きはFTEではできないので、どうしてもTLFが必要だ。 そこで、RichText系に頼らずにTLFを使って表示することにした。こんな風。 <?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="320" minHeight="320" creationComplete="onCreationComplete();" > <fx:Script> ...

TextFlowはAlphaの計算がおかしいかもしれない?

イメージ
何が原因なのかまだ分からないのだけど、 flashx.textLayout.elements.TextFlow を使っていておかしな現象を見た。Alpha関連の問題だ。 下レイヤーのテキストはAlpha=1.0(完全に不透明)で、上レイヤーのテキストはAlpha=0.2で重ねた。 しかし、上レイヤーにあるはずの0.2が1.0の下レイヤーにあるように見えている。 さらに、ここで下レイヤーのテキストをAlpha=0.99(ほぼ完全に不透明)にしてみる。 薄いままであるはずの0.2のテキストが0.99のバウンディングボックスの領域に従って濃くなっている。 何なんだろう?解決策はもちろん、思い当たるフシも全く無し。 ギブ \(^o^)/

「spark.primitives:BitmapImageに代入可能である必要があります」が出たら・・・

FB4で作っていたスキンをFB4.6でコンパイルし直そうとするとこんなエラーが。 スキンパート型 "spark.components:Image" は "spark.primitives:BitmapImage" に代入可能である必要があります。 まったく意味がわからん(^^); HostComponentのところにエラーマークが出るけど、エラーの原因はまったく違うところだった。 まず、mx:Imageを使っていた場所をs:Imageに変更してみたけどまだエラー。 そこで、さらにs:Imageをs:BitmapImageに変更するとエラーはなくなった。

SparkのLabelは縦書きできない!_| ̄|○

RichTextとSparkのLabelはどちらもFTEのパワーを使うコンポーネントだ。 だから両方のコンポーネントがFTE関連の高度なスタイルプロパティーをもっている。例えば、文字間隔とか行間隔とか。 しかし、この2つのコンポーネントには決定的な違いがあることに気がついた。 SparkLabelは縦書きができない!_| ̄|○ RichTextにあるblockProgressionスタイルがSparkLabelにはないのだ。 以上、終了\(^o^)/オワタ

AIRで外部埋め込みフォントを動的に読み込んで表示する時の原因不明の問題

イメージ
先日はAIRで動的に埋め込みフォントを読み込んだ。 琴線探査: AIRで動的に埋め込みフォントを読み込むには? こうして読み込んだフォントの表示に関して、ちと問題があったので書いておきたい。 AIRで埋め込みフォントを表示する方法は少なくとも4つある。 1.TextFieldを使う(embedAsCFFを使わない古い方法) 2.FTEを使う(embedAsCFF使用。少々面倒。) 3.SparkLabelを使う(embedAsCFF使用。一番シンプル。FTEを直接拡張。NOT TLF。) 4.RichTextなどのTLF系のコンポーネントを使う(embedAsCFF使用。少々面倒。) 1-3までは表示できたのだけど、4のTLF系での表示がどうしてもできない。コードはこんな感じ。 var fontSize:Number = 18; var ui:UIComponent = new UIComponent(); addElement(ui); //TextField var tf:TextField = new TextField(); tf.autoSize = TextFieldAutoSize.LEFT; tf.defaultTextFormat = new TextFormat("あくあフォント", fontSize); tf.embedFonts = true; tf.text = "embedAsCFFがfalseの外部埋め込みフォントをTextFiledで表示"; tf.y = 0; ui.addChild(tf); //FTE var fd:FontDescription = new FontDescription("えれーな", "normal", "normal", FontLookup.EMBEDDED_CFF); var ef:ElementFormat = new ElementFormat(fd, fontSize); var te:TextElement = new TextElement("embedAsCFFがtrueの外部埋め込みフォントをFTEで表示", ef); var tb:T...

AIRで動的に埋め込みフォントを読み込むには?

AIRで動的に埋め込みフォントを読み込むには?大体、そもそも、そんなことが可能なのか? Flash的にはこのようにするらしいので、たぶんAIRでも可能ではあるだろう。 AS3 Runtime Font Loading – nochump.com ということで、とりあえずやってみる。 まず上の記事にあるように、フォントを埋め込んだFontPack.swfをFlashBuilderでActionScriptプロジェクトで作る。FlexでもAIRでもライブラリプロジェクトでもなく、ActionScriptプロジェクトだ。 FontPack.asはこんな感じ。 package { import flash.display.Sprite; public class FontPack extends Sprite { public static var vernum:String = "111213.0"; //これは必ずしも必要ではない [Embed(source="fonts/aquafont.ttf", fontName="aquafont", mimeType="application/x-font", embedAsCFF="true")] public static var AquaFont:Class; } //END class } //END package そして、さらに上の記事を参考に、AIRのプログラムにこのFontPack.swfを読み込む処理を追加する。こんな感じ。 protected function onClickBtnFontPackDL():void { var url:String = "http://path/to/FontPack.swf"; var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteLoader); loader.load(new URLRequest...

突然FlashでFlickrから画像を読めなくなったら「staticflickr問題」。よりHTML5に移行しないとダメだな感が募った。

どうやら2011.11.19日頃から、FlickrのAPIの仕様が変わったようだ。 その影響でFlashのプログラムから画像を読み込めなくなった。より正確に言うと、BitmapData化できなくなった。 とは言え、完全に読み込めなくなったわけではない。スモールサイズは普通に読み込める。読み込めなくなったのは、分かっている限りでは、ラージサイズの画像だ。 では、画像が無くなったのか?と思うと、そうではなかった。 APIでスモールサイズとして返ってきたURLはこれ。 http://farm7.static.flickr.com/6055/6340479554_c0cc8307df_s.jpg ラージサイズの画像は末尾の「s.jpg」を「b.jpg」に変えればアクセスできる。 http://farm7.static.flickr.com/6055/6340479554_c0cc8307df_b.jpg つまり、画像は無くなっていない。何なんだ? 実際のエラーはこれだった。 SecurityError: Error #2122: セキュリティサンドボックス侵害 : BitmapData.draw:http://〜 は http://〜 にアクセスできません。ポリシーファイルが必要ですが、このメディアがロードされたとき、checkPolicyFile フラグが設定されませんでした。 ということで、ポリシーファイルの読み込みがうまくいっていないのか?とも疑ったが、それならスモールサイズも読み込めるはずがない。 しばらく途方に暮れたが、APIで返ってきたラージサイズ用のURLにごく僅かな違いを発見した。 http://farm7.staticflickr.com/6055/6340479554_c0cc8307df_b.jpg 「static.flickr」が「staticflickr」になっている のだ! これだと、すでに読み込んでいるポリシーファイル「 http://farm7.static.flickr.com/crossdomain.xml 」は無効になる。なぜなら、ドメインが違うから。 しかも、新サーバーには「 http://farm7.staticflickr.com/crossdomain.xml 」が無い...

FTEでのテキストの塗りが何とかならないかと思ったら、やっぱりダメだったorz

FTEやTextFlowでのテキストの塗りが何とかならないかと思ったら、やっぱりダメだったorz 例えば elementFormat.fillShaderStyle(shader); or flowElement.fillShaderStyle(shader); とか elementFormat.fillBitmapStyle(bmp); or flowElement.fillBitmapStyle(bmp); とかいう感じにしたかったのだけど、ダメだ。どちらもcolorしか設定できない。 flash.text.engine.ElementFormat - Adobe Flash Platform 用 ActionScript 3.0 リファレンスガイド flashx.textLayout.elements.FlowElement - Adobe Flash Platform 用 ActionScript 3.0 リファレンスガイド うーむ。これだと、Flashでテキストの塗りをどうにかするには画像処理をしなければならないだろう。 つまり、そう簡単にはできぬということがわかった。