Away3D TypeScriptのビルドがまた5月13日付で変わった [Edit]

すでに2014年4月21日付記事「Away3D TypeScript最新ビルドの基本的な変更点」で、それまでの古いコードをどのように書き改めれば動くのかをご説明しました。その後、5月6日付でビルドが改められ、さらに13日にも更新されました。そして、5月より前に書かれたコードは、またしても動かなくなりました。

01 Away3D TypeScriptライブラリが3つに増えて名前も変わった

前出「Away3D TypeScript最新ビルドの基本的な変更点」でふたつになったとお伝えしたライブラリがさらに3つに増えました(図001)。しかも、それぞれのJavaScript(JS)ファイルの名前まで変わっています。JavaScriptのライブラリJSファイルを名前順で並べたとき、3つが近くに揃わないのは何となく嫌です。

  • 2013年12月3日まで
    • Away3D.next.min.js

  • 2014年5月2日まで
    • awayjs.next.min.js
    • away3d.next.min.js

  • 最新ビルド
    • awayjs-core.next.min.js
    • stagegl-context.next.min.js
    • stagegl-renderer.next.min.js

図001■2014年5月13日付Away3D TypeScriptの3つのライブラリJSファイル
図001

02 プリミティブはひながたの「プレハブ」オブジェクトからつくる

5月より前のビルドでは、幾何情報のジオメトリオブジェクトと素材のマテリアルオブジェクトから物体のMeshオブジェクトができ上がりました。たとえば、jsdo.itのサンプル001「Away3D: Rotating a cube in the 3D space」は、つぎのように立方体のプリミティブをつくっています。

var geometry = new away.primitives.CubeGeometry(width, height, depth, 1, 1, 1, false);
var defaultTexture = away.materials.DefaultMaterialManager.getDefaultTexture();
var material = new away.materials.TextureMaterial(defaultTexture);
var mesh = new away.entities.Mesh(geometry, material);

サンプル001■Away3D: Panning and tilting the camera in the 3D space

5月からのビルドでは、まずひながたとなる「プレハブ」(prefab)のオブジェクトをつくらなければなりません。それらのクラスの名前空間(パッケージ)はaway.prefabsです(図002)。前掲サンプルコードは、以下の「Away3D 14/05/06 : Rotating a cube in the 3D space」のように書替えています。

// var geometry = new away.primitives.CubeGeometry(width, height, depth, 1, 1, 1, false);
var defaultTexture = away.materials.DefaultMaterialManager.getDefaultTexture();
var material = new away.materials.TextureMaterial(defaultTexture);
// var mesh = new away.entities.Mesh(geometry, material);
var mesh = new away.prefabs.PrimitiveCubePrefab(width, height, depth, 1, 1, 1, false).getNewObject();
mesh.material = material;

図002■名前空間away.prefabsのクラス
図002

サンプル002■Away3D 14/05/06 : Rotating a cube in the 3D space

PrimitiveCubePrefab()コンストラクタには引数に幾何情報を渡します。そのインスタンスにPrefabBase.getNewObject()メソッドを呼出せばMeshオブジェクトが得られます。素材のマテリアルはオブジェクトのMesh.materialプロパティに与えます。

03 AssetLibraryBundle.resourceCompleteイベントの問題

これは5月より前のビルドでは試していなかったので、5月13日付現在の問題としてご紹介しておきます。AssetLibraryBundle.resourceCompleteは、素材のファイルをロードしたとき、読込みが済んだら起こるイベントです。

ところが、イベントリスナーが素材を取出そうとしても、データは空の場合がありました。そのため、データがあるかどうかを確かめて、なければ改めて読込み直す必要があるようです。具体的なコードの例については、「Away3D: パーティクルのアニメーション」の注[*4]をご参照ください。

以上は、5月6日付ビルドで変わったことです。5月13日付の更新はおもにバグ修正に関わるようで、少なくとも試した基本的なコードは同じように動きました。。

その他の記事