今回から数回に分けてActionScriptで3Dを試してみましょう。
3Dは難しいというのが一般的なイメージかもしれません。
実際にこれをスクリプトだけで実現するのは大変だろうと思います。ところが、ライブラリを使用すると実に簡単に3D表現が可能になるのです。
では早速サンプルを見ていきましょう。
なんだ、お前のホームページか、センス無いなと言わないでください。下段の真ん中にあるのがPapervision3Dを使用したサンプルです。工夫すると色々な作品ができそうですね。あとは創造力です。
今回の連載の最終目標はとりあえずこのサンプルと同じものを作成する事です。
そのためにはまず基本を少し勉強しておきましょう。
まずはカスタムクラスの作成方法です。
カスタムクラスの作成
ポリゴンがどうしたこうしたと怪獣みたいな名前は少し置いといて、いきなり球体を描くソースを見てみましょう。
球体を描くソース
package { import org.papervision3d.objects.primitives.*; import org.papervision3d.view.*; import org.papervision3d.materials.*; public class Main extends BasicView { public function Main():void { var sphere:Sphere = new Sphere(null,600,30,30); scene.addChild(sphere); startRendering(); } } }
描画結果
コンストラクタの中にたった3つのメソッドがあるだけです。
これで球体が描かれている訳です。
これくらいならプログラミングの経験がなくてもできそうですね。
それではActionScriptの文法について見ていきましょう。
まずはパッケージについてです。
パッケージについて
一番上の
package
これはパッケージの宣言です。package しか書かれていませんので、これはデフォルトのパッケージとなります。名前のないパッケージは他のどこからも参照することができるものです。ちょっとした作品を作る場合はこれで大丈夫です。
少し詳しく説明します。
パッケージはクラスを収めるコンテナです。
その領域にはパッケージ名が付けられます。パッケージ名は慣習的に通常小文字で始めます。一方クラス名は通常大文字で始めます。そうすることでパッケージ名とクラス名を区別しやすくなります。
パッケージ定義ディレクティブ(ディレクティブとはプログラム命令の意味)の一般形式は以下のとおりです。
クラスのソースがパッケージ内にあるとそのクラスは自動的にそのパッケージ名をクラスの名前に加わります。例えばgemeというパッケージ内のクラスPlayerという名前のクラスはgame.playerクラスとなります。これでプログラム内の他のクラスやビルトインクラスとコンフリクト(衝突)が避けられる訳です。
パッケージ名の付け方
慣習的にプログラムを作成する組織が持つドメイン名を逆に並べて、次に任意のパッケージ名(.)で繋げる事で一意であることが保証され、別の組織が作成したコードとのコンフリクトが避けられます。
package net.studiom.map{
この例はstudiom.netというドメイン名を持つ作成者がmap関連のクラスを作成する場合です。
package名をこのようにするとソースファイルの置き場に注意が必要です。
このソースファイルはmapフォルダ内に存在し、mapフォルダはstudiomフォルダ内に存在し、studiomフォルダはnetフォルダ内に存在します。(net/studiom/map/Mapstate.asのファイル構造になる)
名前を持たないパッケージに含まれたクラスは、自動的に作成されるパッケージ内に配置されます。このパッケージは名前のないパッケージと呼ばれます。名前のないパッケージ内のクラスはそのプログラム内のどこからでも利用できます。ただし、別のクラスとコンフリクトの恐れがあることを認識しておく必要があります。