[AS3] new演算子でビジュアルオブジェクトをつくる [Edit]

プログラムでインスタンスをつくるには、「new クラス名()」というかたちでコンストラクタを呼び出すのが原則だ。ところが、MovieClipやTextFieldなどは、コンストラクタでインスタンスを生成することができず、MovieClip.createEmptyMovieClip()あるいはMovieClip.createTextField()などといった特別なメソッドを使う必要があった。ActionScript 3.0では、これらも原則どおりコンストラクタで作成することができる

MYCOMジャーナル「AdobeのFlash担当者に訊く - Flash Player 9とActionScript 3.0何が変わる?」注[*5]

という訳で、new演算子を使って、インスタンスをつくってみましょう。

Spriteインスタンスをタイムラインに表示する

インスタンスをタイムラインにスクリプトで動的に配置しようとした場合、インスタンス自身はタイムラインをもつ必要がありません。ActionScript 3.0には、MovieClipからタイムラインや動的な操作に不要なものを取去ったSpriteクラスがあります。MovieClipは、Spriteのサブクラスになります(akihiro kamijo「SpliteクラスとMovieClipクラス」参照 )。

そこで、Spriteインスタンスをnew演算子で生成して、タイムラインに表示してみましょう。ただし、インスタンスを生成するだけでは、タイムラインには表示されません。DisplayObjectContainer.addChild()メソッドを用いて、タイムラインの表示階層を管理するディスプレイリストに加える必要があります(ディスプレイリストについては、akihiro kamijo「DisplayObjectContainerクラス」参照)。

Spriteインスタンスを表示するサンプルスクリプト

つぎのフレームアクションは、Spriteインスタンスに正方形を描き、タイムライン中央に表示します(スクリプト001)。

Spriteクラスのフルパスの名前(完全修飾クラス名)は、flash.display.Spriteです。完全修飾クラス名およびimportステートメントについては、「スクリプトでフィルタを使う − BlurFilter」をお読みください。なお、プロパティの型指定に用いられているuintは、正の整数を表します(akihiro kamijo「intとuint」 )。

スクリプト001■Spriteインスタンスを生成して表示する[*1]
// タイムライン: _level0
// 第1フレームアクション
// Spriteクラスのimport宣言
import flash.display.Sprite;
var nSize:uint = 50; // 矩形の1辺の長さ
// Spriteインスタンスの生成
var mySprite:Sprite = new Sprite();
// Spriteインスタンスへの矩形の描画
mySprite.graphics.beginFill(0x0000FF);
mySprite.graphics.drawRect(-nSize/2, -nSize/2, nSize, nSize);
// Spriteインスタンスをディスプレイリストに追加(タイムラインに表示)
this.addChild(mySprite);
// Spriteインスタンスをステージ中央に配置
mySprite.x = this.stage.stageWidth/2;
mySprite.y = this.stage.stageHeight/2;
_____
[*1] スクリプト中で使われているActionScript 3.0の新しいプロパティとメソッドの概要は、つぎのとおりです(「ActionScript 3.0 Language Reference」参照)。

  • Sprite.graphics  SpriteがもつGraphicsインスタンスを参照する読取り専用プロパティです。このプロパティに対して、ベクター描画が行えます。
  • Graphics.drawRect()  XY座標と幅・高さを指定して、矩形を描きます。
  • DisplayObject.x/DisplayObject.y  親オブジェクトから見たインスタンスのX/Y座標を示します。
  • DisplayObject.stage  インスタンスの表示されるステージを参照します。
  • Stage.stageWidth/Stage.stageHeight  ステージの幅/高さを表します。

コメント

この記事にコメントを書く

記事に対するテクニカルな質問はご遠慮ください(利用規約)。

その他の記事