Papervision3Dの勉強のログ

状況

昨日の続きからやったものの上手くいかず。結局、[ヅラド] Papervision3D のプリミティブオブジェクトを生成するサンプル by Flex SDKを参考に表示するところまではいけた。上手くいかなかったのはOSの違い?あるいはcygwinじゃなきゃダメなのか。


動かなかった原因究明は後回し(別名:放置)にして、サンプルコードの解析と、ゲーム作成のためのテンプレート作成に入る。

現在の環境

上記のページのサンプルと同じコードを作成し、そのフォルダに「org」フォルダと「com」フォルダを直で配置する形。これらのフォルダは、あとで別の場所に移動すべきか。

OSはWindowsXPで、コンパイルはバッチに書いて実行。

サンプルコード解析

コードを読むときは「誰かに説明する」というていでやった方が上手くいくような気がしてるので、今回もそれで試す。サンプルコードは、上記のページのもの。

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でできることは何か