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);
			}
		}
	}
}

WOW-Engine + PV3Dによる3次元物理演算

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

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

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

“WOW-Engine + PV3Dによる3次元物理演算” の続きを読む