状況
昨日の続きからやったものの上手くいかず。結局、[ヅラド] Papervision3D のプリミティブオブジェクトを生成するサンプル by Flex SDKを参考に表示するところまではいけた。上手くいかなかったのはOSの違い?あるいはcygwinじゃなきゃダメなのか。
動かなかった原因究明は後回し(別名:放置)にして、サンプルコードの解析と、ゲーム作成のためのテンプレート作成に入る。
現在の環境
上記のページのサンプルと同じコードを作成し、そのフォルダに「org」フォルダと「com」フォルダを直で配置する形。これらのフォルダは、あとで別の場所に移動すべきか。
サンプルコード解析
コードを読むときは「誰かに説明する」というていでやった方が上手くいくような気がしてるので、今回もそれで試す。サンプルコードは、上記のページのもの。
package {
全体を一つのパッケージとする。(パッケージの概念がまだ習得できてないかも)
import 〜
ライブラリ内のクラスを使えるようにする。(C++のincludeは展開だけだったはずだけど、importって別の処理?)(あと、packageの「内部」でやるという点も気になる)
public class HelloWorld3D extends Sprite {
HelloWorld3Dというクラスの宣言。Spriteを継承している。(Spriteって何だっけ。表示するやつだっけ)
private var 〜 : 〜;
メンバ変数の宣言。(この段階で初期化できるようなので便利だが、初期化順序はどうなってるんだろう。定数で初期化は可能?そもそも定数はある?)
public function HelloWorld3D():void {
名称から見て、たぶんコンストラクタ。内容は「リサイズの対応」「myLoopEventを毎フレーム呼ばせる」「メンバの初期化」。(ノード=DisplayObject3Dの依存関係は確認が必要かな。相対位置で動かせるということかもしれない)
private function create〜():DisplayObject3D {
DisplayObject3Dを作成して返す関数達。「マテリアル(色などの情報)」と「形状」を指定している模様。
private function myLoopEvent( event:Event ):void {
毎フレーム呼ばれるはずの関数。マウスの位置をもとに、生成したDisplayObject3Dを回転させている。(回転はrotationXなどを使っているが、このような「X軸の回転」「Y軸の回転」「Z軸の回転」は、かける順序によって結果が異なるはずなので、そこらへんを調べる必要がある。クォータニオンは使えない?)
private function onStageResize(event:Event):void {
ウィンドウのリサイズへの対応。
これからの作業
上で出てきた疑問点を調べて解消。その後、Singletonなどの実現方法を調べた後、ゲーム用のテンプレートの作成に移行。
疑問点の列挙
- パッケージって何さ
- importの行う具体的な処理
- Spriteって何さ
- 定数の有無と初期化順序
- DisplayObject3Dでできることは何か
- rotationXを使う場合のかける順序
- クォータニオンは使えるか