PR

 SuzukaでActionScriptを利用する際には,自作のクラス(カスタムクラス)を作成し,利用することもできます。ただし,Suzukaでのカスタムクラスは,Flashで外部クラスファイルを作成し,importして使用するような形式ではありません。サンプルを作りながら,その使い方をご紹介します。

 作成するサンプルは,簡単なお絵かきアプリケーションです。出来上がりは,図1のようなものです。

図1●簡単なお絵かきアプリケーション
図1●簡単なお絵かきアプリケーション
[画像をクリックするとムービーを表示します。Flashのプロジェクト・ファイルをこちらからダウンロードできます]

 このアプリケーションでは,マウスでドラッグした座標の位置を覚えておき,一定のタイミングで,その座標を元に線を描画しています。また,線を描画する際に,ちょっとずつ座標を動かし,揺れているような表現をしています。

 このようなプログラムを作成するために,3つのカスタムクラスを作成し,利用していきます。

表1●作成する3つのクラスの概要
カスタムクラス 内容
DrawPointクラス 描画する座標と,その座標での描画モードを管理するクラス
DrawPointListクラス DrawPointクラスをまとめて管理するクラス
Canvasクラス DrawPointListに従って,線を描画するキャンバスとなるクラス

Suzukaにおけるカスタムクラスとは

 では,早速作成してみましょう。まず,マウスでドラッグした位置の座標を管理するためのクラスである「DrawPointクラス」を作成します。

 Suzukaでカスタムクラスを作成する場合には,[シンボルリスト]を右クリックして表示されるメニューから,[アイテムの追加]-[クラスを追加]を選択します。[クラスのプロパティ]ダイアログボックスが表示されるので,[クラス名]欄に,クラス名を入力し,[OK]ボタンを押します(図2)。今回のクラス名は,「DrawPoint」ですね。

図2●クラスのプロパティ
図2●クラスのプロパティ

 [シンボルリスト]に追加された。クラスアイテムを選択し,[シンボルリスト]上部の,[編集]ボタンを押します。すると,[レイヤーリストとタイムライン枠]があらかじめアクションレイヤーがひとつ用意された,カスタムクラス専用の物に切り替わります(図3)。このアクションレイヤーにカスタムクラスの定義を記述していきます。

図3●カスタムクラスの編集
図3●カスタムクラスの編集

 なお,クラスアイテムでは,タイムラインが切り替わると言っても,フレームを追加したり,グラフィックなどのアイテムを追加したりすることはできません。便宜的に,タイムラインという表示方式を使っているだけで,クラスアイテムは,クラス定義をスクリプトとして記述するだけのアイテムとなっています。

 Flashなどでカスタムクラス定義を記述する場合には,通常,

class クラス名{
  public var プロパティ1:データ型;
  private var _プロパティ2:データ型;
  public function メソッド1():戻り値のデータ型{
    //処理
    return 戻り値;
  }
}

のような形で記述を行いますが,Suzukaの場合,上記の定義は,次のように記述します。

var プロパティ1;
var _プロパティ2;
function メソッド1(){
  //処理
  return 戻り値;
}

 「class{}」という記述はせずに,ダイレクトに定義の内容から書きはじめます。また,変数を宣言した時と同様に,データ型の指定はできません。さらに,「public」や「private」などのアクセス制御用のステートメントは使用できません。全部publicな状態と考えてください。

 そのほかにも,筆者の気がついた限りでは,Flashで作成するActionScript2.0用のカスタムクラスと,Suzukaのカスタムクラスには,次のような違いがあります(表2)。

表2●ActionScript2.0との記述の違い
違い 説明
class{}で囲まなくても良い クラス定義をクラス名で始まるステートメントブロックで囲む必要はありません
プロパティやメソッドの戻り値,変数のデータ型は指定しない データ型の指定はできません
プライベートなメンバーは作成できない privateステートメントは使用できません
クラスプロパティやクラスメソッドは作成できない staticステートメントは使用できません
アクセサは作成できない function getや,function setなどを使用した,いわゆるgetter,setterの作成はできません
インスタンスメンバーにアクセスするときには必ず「this」を使う インスタンスメンバーにアクセスするときには「this」が必要です

 これらの違いを踏まえながら,カスタムクラスの定義を作成していきましょう。