FlashAS3

[Papervision3D]リボン

Papervision3Dでリボンです。
やり方としてはPlane内のTriangle3Dの頂点を操作してPlane同士をつながっているように見せています。
・ABCD…のPlaneを用意
・Aの左端をワールド座標へ変換※1
・Bの左端をワールド座標へ変換
・AとBの座標の差を求める
・得られた座標をAのローカル座標A’へ変換
・Aの右端のTriangle3Dの頂点をA’へ移動
・対象Planeを変えて※1へ

スクリーンショット1

リボン

[3Dプロッタver2]

スクリーンショット1

3Dプロッタ2

焦点距離:camera.focus
拡大率:camera.zoom
対象オブジェクト:target_mc
対象オブジェクト3D座標:_x, _y, _z

scale=(camera.focus)/(camera.focus+(target_mc._z-camera.z-camera.focus)) * camera.zoom;
xpos=(target_mc._x-camera.x)*scale;
ypos=-(target_mc._y-camera.y)*scale;

target_mc.scaleX=target_mc.scaleY=scale;
target_mc.x=xpos;
target_mc.y=ypos;

[3Dプロッタ]

焦点距離:camera_f
対象オブジェクト:target_mc
3D座標:x3d, y3d, z3d

var scale=camera_f/(camera_f+target_mc.z3d);
var xpos=target_mc.x3d*scale;
var ypos=target_mc.y3d*scale;

target_mc.scaleX=target_mc.scaleY=scale;
target_mc.x=xpos;
target_mc.y=ypos;

[URLStream]

Loaderクラスのインスタンスでloadすると画像やswfを読み込むことが出来ます。
しかし、ローディング中にunloadしてもストリームが止まらないという現象が起きます。
ダウンロードシミュレータ上で確認できます。
FlashPlayerのバグだという噂ですが
これを回避するのにURLStreamを使用するとよいです。

var myLoader=new Loader();
var myStream=new URLStream();
myStream.addEventListener(Event.COMPLETE, completeHandler);
myStream.load(new URLRequest("ファイル名"));
function completeHandler(event){
	var bArray=new ByteArray();
	myStream.readBytes(bArray);
	myStream.close();
	myLoader.loadBytes(bArray);
}

unload時

if(myStream.connected){
	myStream.close();
}else{
	myLoader.unload();
}

[IOError]

Flashからファイルをロードするときパスが間違っていたりファイルが無かったときの処理の仕方。
よく忘れるのでメモ

var ns = new Namespace(url);
var xmlLoader = new URLLoader();
xmlLoader.dataFormat = URLLoaderDataFormat.TEXT;
xmlLoader.addEventListener(Event.COMPLETE, func);
xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, func2);
xmlLoader.load(new URLRequest(url));