2010.12月.01 2880pxより下にあるダイナミックテキストが表示されないの対処法

この大きさのFlashを作ることはあまりないかもしれませんが、対処方法のメモ書き。
外部XMLを読み込み表示するFlashのエンベッドwmodeを変更したところ、
下の方のテキストが表示されなくなりました。
調査したところ発生条件は、

  • FlashPlayer9以下
  • wmodeが”transparent”
  • テキストフィールドへ動的に文字列を流し込んでいる
  • そのテキストフィールドのY座標が2880px以上

でした。
対処法は以下のいずれか。

  1. 書き出し&閲覧Playerバージョンを10以上にする
  2. フォントを埋め込む
  3. cacheAsBitmap = true (ビットマップとしてキャッシュにチェック)

Flashの表示オブジェクトの限界が縦横2880pxらしいのでそれが関係していると思われる。
FlashPlayer10からはその制限が緩和されているため(参考)、
試してみたところテキストが表示されました。

該当のテキストフィールドにフォントを埋め込んでしまうのも効果あり。

表示されないだけで、文字列自体は入っているっぽかったので、
テキストを含むMovieClipのcacheAsBitmapをtrueにしたところ、これも効果あり。
今回はレギュレーションがPlayer8で固定、
日本語も入るのでフォントを埋め込むと容量が大きくなりすぎるということで、
3番の方法で対処しました。

2010.11月.30 Adobe Max 2010 Retweet 公開資料まとめ

11月25日ベルサール汐留で行われたAdobe MAX 2010 RETWEET~ Adobe Flash Platform 最新情報 from MAXへ行って来ました。
10月に行われた本家MAXのおさらいイベントで、内容としてはAir for Androidなどスマートフォン成分が多めでした。
こういうのは行ってすぐまとめなきゃと思いつつ放置、そして内容を忘却・・・。
思い出そうとネットでレポートを探すと大半のスピーカーの方々が既に発表資料を公開されていたので、
下手にレポートせず、それらをここにまとめてお茶をにごしておきます。

【2010/12/17】
・上条彰宏氏「Flash Player描画機能の最新情報」の資料URLを追記
公式にもレポートが追加されました

Read more ›

2010.9月.28 JSFLメモ

JSFLメモ久しぶりにJSFLを自作する機会があったのでそのメモ。
いちいち何ができて何ができないのか分かりません。

■アイテム、インスタンスが『ボタン』かどうかを調べる
ライブラリにあるアイテムはitemTypeで「movie clip」、「graphic」、「button」等取得できます。
ステージ上にあるシンボルの場合instanceTypeでは、ムービークリップ、ボタン、グラフィックが一緒くた「symbol」としか表示されません。
何とかならないか調べたところ、ボタンインスタンスであればbuttonTrackingが取得できるのでそれで対応。

//ライブラリのアイテムがボタンか?
if(fl.getDocumentDOM().library.items[0].itemType == "button")

//ステージのインスタンスがボタンか?
if(fl.getDocumentDOM().getTimeline().layers[0].frames[0].elements[0].buttonTracking != undefined)

 
■キーフレームかどうかを調べる
そのフレームがキーフレームかを調べるには、公式リファレンス(注:PDF) の例そのまんまですが、frame.startFrameプロパティが配列のインデックスと一致しているかどうかを確認。

//キーフレームか否か?
var frameArray = fl.getDocumentDOM().getTimeline().layers[0].frames;
var n = frameArray.length;
for (i=0; i<n; i++) {
	if (i==frameArray[i].startFrame) {
		alert("Keyframe at: " + i);
	}
}

//現在のタイムライン全体からキーフレームに置かれている要素一つ一つを走査する
var tl = fl.getDocumentDOM().getTimeline();
var layerNum = tl.layers.length;
for (var l = 0; l < layerNum; l++) { 
	var frameNum = tl.layers[l].frames.length;
	for (var f = 0; f < frameNum; f++) { 
		//キーフレームか否か
		if (f == tl.layers[l].frames[f].startFrame) {	
			var elementNum = tl.layers[l].frames[f].elements.length;
			var elts = tl.layers[l].frames[f].elements; 
			for (var e = 0; e < elementNum; e++) { 
				var elt = elts[e];
				fl.trace("element of Keyframe : " + elt);
			}
		}
	}
}

2010.9月.22 WOW-Engine + PV3Dによる3次元物理演算

3Dの物理演算コンテンツのデモを作ることがあったので覚書。
物理演算のライブラリは数あれど、何も分からなかったのでとりあえず3D対応を謳っていたWOW-Engineを選択。
調べていく中で分かりましたが、物理演算系ライブラリは基本内部計算のみ、表示部分は自前か他のライブラリを使用する必要があるため、 例えばよく知られたBox2Dのような2次元物理演算のライブラリを利用して、3Dでの物理表現を実装することも可能です。
比較なんぞしていないですが、表現によってはそちらの方が動作が軽かったりしそうですね。
ここでは導入方法と実装の考え方をざっくりと。
3Dエンジン部分はPapervision3Dを使用しました。

【導入方法】
まず公式サイトからファイルを入手します。
そのままパブリッシュしようとすると、DListNode云々と怒られるので、ここからpolygonalクラスというのを入手して配置する必要があります。データ構造を扱いやすくするライブラリだそうです。

【実装】
まず各クラスの処理を簡略化したものがこちら。WOW-Engine + PV3D による3D物理演算コンテンツ概略図

Read more ›

2010.6月.08 Flash間での日本語クエリの受け渡し

Flashで生成した日本語文字列を、
ページ遷移後の別のFlashに受け渡したいという場面がありました。
なるべく簡易な方法ということで、
遷移するページURLにクエリとして日本語文字列をくっつけることに。
そのままブラウザでページ遷移すると文字列がURLエンコードされるので、
JavaScriptのdecodeURI()でデコードしてFlashに渡すということをしたのですが、
ブラウザによって動いたり動かなかったり。
動かないブラウザは2重にエスケープされているっぽい?

きっと何か方法があると思いつつ、Flash側で回避。
JSはクエリ部分を取得してFlashに渡すのみで、余計なことはしない。

送信Flashで送りたい日本語文字列をUTF-8エンコードescape()にかける。
クエリで受け取った文字列をFlash内部でunescape()すると元の日本語に戻ります。

//■送信Flashでエンコード
var str_ori:String = "トライナイン";
var str_esc:String = escape(str_ori);
trace(str_esc); //出力:%E3%83%88%E3%83%A9%E3%82%A4%E3%83%8A%E3%82%A4%E3%83%B3


//■受信Flashでデコード
trace(unescape(str_esc)); //出力:トライナイン

 
【6月28日追記】
外部から読み込んだXML等のテキストをエンコードするとうまくいかない場合が。
 System.useCodepage = false;
を明示的に前に書いてやると直るかもしれません。

2010.5月.27 自転車で琵琶湖一周してきた

自転車で琵琶湖一周
GWに琵琶湖を一周自転車ツーリングしてきました。
天気に恵まれたこともありとても気持ちよく走れたので、おすすめポイントなど書き残してみる。
Read more ›