Away3DのFlashPlayer10版が大きく仕様変更して、MatrixAway3Dクラスが廃止。ビルトインクラスのMatrix3Dに置き換わった。なので、Object3Dのtransformプロパティの各要素を直接書き換えたりするような実装してる場合はMatrixAway3Dに関わる部分を変更しないとビルドできない。MatrixAway3DとMatrix3Dの各要素は下記の対応づけ。
MatrixAway3D
| MatrixAway3D.sxx |
MatrixAway3D.sxy |
MatrixAway3D.sxz |
MatrixAway3D.tx |
| MatrixAway3D.syx |
MatrixAway3D.syy |
MatrixAway3D.syz |
MatrixAway3D.ty |
| MatrixAway3D.szx |
MatrixAway3D.szy |
MatrixAway3D.szz |
MatrixAway3D.tz |
| MatrixAway3D.swx |
MatrixAway3D.swy |
MatrixAway3D.swz |
MatrixAway3D.tw |
ビルトインMatrix3D
| Matrix3D.rawData[0] |
Matrix3D.rawData[4] |
Matrix3D.rawData[8] |
Matrix3D.rawData[12] |
| Matrix3D.rawData[1] |
Matrix3D.rawData[5] |
Matrix3D.rawData[9] |
Matrix3D.rawData[13] |
| Matrix3D.rawData[2] |
Matrix3D.rawData[6] |
Matrix3D.rawData[10] |
Matrix3D.rawData[14] |
| Matrix3D.rawData[3] |
Matrix3D.rawData[7] |
Matrix3D.rawData[11] |
Matrix3D.rawData[15] |
値を読み取るだけなら、
var tx:Number = Object3D.transform.tx;
という記述を、
var tx:Number = Object3D.transform.rawData[12];
に置き換えることで対処できる。
要素の値を変更する場合、MatrixAway3Dの要領で
Object3D.transform.rawData[12] = 100;
なんて感じで直接代入しても変更が反映されないので、
var vec: Vector.<Number> = Object3D.transform.rawData;
vec[12] = 100;
Object3D.transform.rawData = vec;
と、Matrix3Dの仕様に準ずる。
また、MatrixAway3Dで実装されていたメソッドの
- quaternion2matrix
- compare
と、ゲッター/セッターとして定義されていた
は、Matrix3DUtilsという新クラスが引き継いでる。
forward, up, rightについては読み取り専用でそれぞれ
- getForward
- getUp
- getRight
というメソッドに変更になった。
あと、ベクトルについても主要な部分はNumber3DからVector3Dへ移行してる。
まだ一部でNumber3Dが使われている部分があるけど、最終的にはなくなるみたいなのでNumber3Dは忘れてよさげ。Number3Dに実装されてたgetAngleメソッドは、新クラスVector3DUtilsが引き継いでる。
今回の仕様変更がどの程度影響してるのか分からんけど、じわじわと高速化してきてうれしげ。新機能いらないから洗練してほしい。
2010/09/16追記
とか言ってるうちに、FP10版3.5.4にアップデート。
ArrayをVectorに置き換えたりという地味な最適化を目的としたものみたいだ。