2005年12月アーカイブ

今回は、関数に関連するタームの整理です。

  1. Function
    ActionScript では関数もプロパティの一種ですが、関数として認識されるオブジェクトの型の名前が Function です。Function 型のオブジェクトは引数を渡して処理を呼び出すことができます。
  2. 関数
    Function 型のオブジェクトの定義やそのインスタンス全般を指します。
  3. メソッド
    クラス定義の一部としてある関数定義や実行時にオブジェクトから呼び出し可能な関数オブジェクトを指します。別の見方をすると、クラス定義の外で定義される関数やオブジェクトから呼び出すことのできない状態の関数が有るということになります。

それでは、皆様良いお年を。

コンストラクタはクラス名と同じ名前を持つ関数で、インスタンスを初期化する際に呼び出されます。コンストラクタは初期化時の定型処理を記述するのに使われますが、特に定義されていなくても文法上の問題は有りません。

class SampleClass {
  // コンストラクタ定義
  public function SampleClass() {
    // 初期化処理の記述
  }
}

get と set は特別な関数を定義するために予約されている名前です。オブジェクトのカプセル化のため属性に直接アクセスする代わりに関数を定義したい、という人のための機能です。 他の言語では getXXX() とか setXXX() とかいう関数を定義したりすると思いますが、ActionScript では少し流儀が異なります。

下が、get 関数と set 関数それぞれを定義しているサンプルです。

引数のデフォルト値

AS3 では関数宣言時に引数のデフォルト値を指定することができます。デフォルト値の無い引数と有る引数が存在する場合には、デフォルト値の無い引数を引数の列の最初にまとめます。デフォルト値として使用できる値は、コンパイル時に既知の定数のみです。

function sampFunc(x:int, y:int, z:int = 1) {
  // 呼び出し時に指定がなければ z の値は 1 になる
}
sampFunc(1, 0);

デフォルト値のある引数は呼び出し時に省略可能になります。通常は意識する必要のない引数に使用するとよいでしょう。

ActionScript のオブジェクトは Java や C++ と少し違う点があります。それは、オブジェクトがプロパティの集合であるという点です。プロパティには関数も含まれます。そのため実行時に関数を代入することも可能です。また、関数も他のオブジェクトと同様に、固有のプロパティをやメソッドを持つことができます。

先週末のサイトのメンテの際の DB のバックアップ/リストア作業により、今まで投稿した内容が全て文字化けしてしまいました。ローカルに編集中のファイルがあったものは、そちらから修復しましたので、多少内容が異なる箇所があるかもしれませんが、ご覧いただければと思います。
いただいたコメントにつきましては、大変申し訳ないのですが、バックアップが無いため修復できませんでした。これに懲りず、またコメントをお寄せいただければと思っておりますので、どうかよろしくお願いいたします。

AS2 でも package の機能はありましたが、その役割は基本的にクラス名の重複を防ぐことでした。AS3 の package はアクセススコープの単位にもなります。

package とアクセス修飾子

AS3 では以下のようにして定義するクラスが含まれるパッケージ名を宣言します。以下の例では、sample パッケージ内に SampleClass クラスを定義しています。このときクラスの完全限定名は sample.SampleClass になります。

package sample {
  import othersample.OtherClass;
  class SampleClass {
    function sampleFunction() {}
  }
}

マウスイベントの続きということで、遅ればせながら SimpleButton クラス (livedocs@lab) の説明です。

SimpleButton クラス

SimpleButton は InteractiveObject のサブクラスで、マウスの操作に応じてボタンらしく振舞うことができます。 Flash オーサリングツールでボタンシンボルを作成すると4つのフレームができますが、SimpleButton にもそれぞれのフレームに対応したプロパティが存在します。

public upState : DisplayObject        // アップ(通常)の状態の表示オブジェクト
public overState : DisplayObject      //(マウス)オーバーの状態の表示オブジェクト
public downState : DisplayObject      //(マウス)ダウンの状態の表示オブジェクト
public hitTestState : DisplayObject   // ヒットテスト用のオブジェクト

Sprite クラスのごく簡単な紹介は以前にしましたが、今回はマウスイベントの使い方についての補足です。最初に関連するプロパティをまとめて挙げておきます。(最初の2つは親クラスからの継承です)

public mouseEnabled : Boolean    // マウスイベントを受け取るか
public mouseChildren : Boolean   // 子オブジェクトがマウスイベントを受け取るか
public buttonMode : Boolean      // ボタンとして振舞うか
public hitArea : Sprite          // マウスイベントの対象となる画面上の領域
public useHandCursor : Boolean   // カーソルの形状を手の形にするか

Event クラスを拡張すると、自前のイベントクラスを定義することができます。例えば、以下のような感じです。(あまり意味のない例ですが...)

public class CustomEvent extends Event {
  public function CustomEvent() {
    super("customEvent");
  }
  public override function clone():Event {
    return new CustomEvent();
  }
}

今回は Event クラスの主なメソッドについて解説します。最初の2つは、イベントに関連付けられたデフォルトの動作をキャンセルするためのものです。イベントの中で cancelable プロパティが true のものには以下のメソッドが有効です。

public preventDefault() : Void
public isDefaultPrevented() : Boolean

Event クラスの話を始める前に、少しイベントリスナーの登録について補足します。

まず、AS3 ではイベントフローに参加しているノードであればイベントリスナーを登録することができます。それから、中間ノードには、キャプチャーフェーズとバブルフェースでイベントが伝わりますが、イベントリスナー登録時にはこれらを区別する必要があります。addEventListener メソッドを呼ぶ際に、3つ目の引数 (参照記事はこちら) を true にするとキャプチャーフェーズ、false にするとバブリングフェーズ(またはターゲットフェーズ)にリスナー関数が登録されます。デフォルト値は false のため、特に指定しなければ、バブリングもしくはターゲットフェーズに登録されます。

イベントリスナー削除の際も、同様に、対象のフェーズを意識する必要があります。

Macromedia の買収手続きが完了しました。今まで Macromedia を応援していただいた全ての皆様にお礼を申し上げるとともに、いろんな素晴らしい人達と一緒に働く機会をくれた Macromedia に心から感謝します。

Thank you Macromedia!

DisplayObjectContainer の記事のときに、ディスプレイリストと呼ばれる DisplayObject のツリー構造について触れました。AS3 のイベントモデルはディスプレイリストと密接にかかわっています。

2014年1月

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
レンタルサーバー

月別 アーカイブ

Powered by Movable Type 4.261