カスタムクラスの作成
球体を描くソース
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(); } } }
描画結果
import文
任意のパッケージにあるコードは、別のパッケージ内にあるコードを参照できません。
別のパッケージにあるpublicのクラスにアクセスできるようにするには、importディレクティブを使用します。
今回ライブラリはsrcフォルダの中に入れます。ライブラリフォルダは2つでorgフォルダとnochumpフォルダです。
描画する球体ではorgフォルダ内のクラスを使用しますので下記のようにimportを行っています。
ワイルドカードのアスタリスク(*)を使えば、同じパッケージ階層のすべてのクラスを指定できます。アスタリスクを使って指定できるのはあくまで同じパッケージ階層であって、その階層以降のすべてを参照するものではありませんので注意してください。
import org.papervision3d.objects.primitives.*; import org.papervision3d.view.*; import org.papervision3d.materials.*;
クラスの定義
クラス定義はキーワードclassで始め、その後クラス名を記述します。クラス名は慣習的に大文字で始めます。空白やダッシュを含んではいけません。数字から始めるこもできません。パッケージ名を同じにすると、例えば別ファイルに記述したクラスでも同じパッケージの一部とみなされます。一方クラス定義は複数のファイルにまたがることはできません。
クラス名とクラスのファイルは必ず同一にします。Mainクラスの場合はMain.asというファイル名にします。
デフォルトでは、任意のクラスはそのパッケージ内にあるコードからのみ使用することができます。定義されたパッケージの外からクラスを使用できるようにするにはpublic属性をつけて定義します。また、パッケージ内のみ使用できることを明示的に示したい場合はinternal属性を使用します。アクセス制御指定子を省略すると暗黙的にinternal属性となります。
public class Main extends BasicView
extends BasicView は BasicViewクラスを継承するという意味になります。
この場合はBasicViewクラスを継承したパッケージ外のクラスからも参照できるMainクラスを宣言するという意味になります。
継承はオブジェクト指向で非常に重要な仕組みです。継承については別に特集します。
*Adobeのコンパイラではメインクラスにはpublic属性をつけて定義する必要があります。
コンストラクタメソッド
コンストラクタメソッド(コンストラクタ)はクラスのインスタンスを初期化するために使用される、特別な命令セットです。コンストラクタメソッドの名前はクラス名と正確に一致させる必要があります。
コンストラクタメソッドのブロックステートメントはインスタンスを初期化するディレクティブが含まれます。クラスで明示的にコンストラクタメソッドを定義しないとそのクラスの新しいインスタンスで初期化を実行しないデフォルトのコンストラクタを提供します。通常たとえ空でもコンストラクタは常にクラスに含めるようにします。コンストラクタメソッドの暗黙的に制御指定子はpublicとなります。通常は明示的に必ずpublicをつけて記述します。
public function Main():void { var sphere:Sphere = new Sphere(null,600,30,30); scene.addChild(sphere); startRendering(); }
* アプリケーションのメインのコンストラクタはプログラム内で特別な役割を演じます。コンストラクタはアプリケーションの開始後すぐにコードを実行できる機会を提供するのです。つまりメインクラスのコンストラクタはプログラムの開始点と考えることができます。