YoMath.yoRound()関数を次のようにround()という名前にしてし...
YoMath.yoRound()関数を次のようにround()という名前にしてしまうとどうなるでしょうか。round()関数はスーパークラスであるMathクラスにもある関数です。このような場合はサブクラスで定義したround()関数が優先されます。このようにスーパークラスと同じ名前のメンバーをサブクラスで再定義することを「オーバーライド(override)」といい、このような手法は「ポリモーフィズム(polymorphism:多様性)」と呼ばれます。
クラス定義ファイル:YoMath.as
Mathクラスのround()関数をオーバーライドしたYoMath()クラスのround()関数をテストします。
フレームアクション:yomath.fla
クラス定義ファイル:YoMath.as
class YoMath extends Math {
//コンストラクタ
private function YoMath() {
}
//指定の桁数にまとめる--Mathクラスのround()をオーバーライドする
static function round(v:Number, keta:Number) {
var tmpV = v*Math.pow(10, keta);
var ans = Math.round(tmpV)/Math.pow(10, keta);
return ans;
}
}
Mathクラスのround()関数をオーバーライドしたYoMath()クラスのround()関数をテストします。
フレームアクション:yomath.fla
a = YoMath.round(23.85, 0) trace(a)//出力→24 b = YoMath.round(23.85, 1) trace(b)//出力→23.9
Dateクラス、String、Soundクラスといったビルトインクラス(Flas...
Dateクラス、String、Soundクラスといったビルトインクラス(Flash標準装備のクラス)をスーパークラスにすることで、ビルトインクラスを拡張したサブクラスを作ることができます。次の例ではDateクラスを拡張して今日の曜日名を漢字で返すgetYoubi()関数と"年月日(曜日)"で日付を返すgetLongDate()関数を組み込んでいます。
クラス定義ファイル:YoDate.as
実際にYoDateクラスを試してみます。YoDateクラスはDateクラスを継承しているので、YoDateクラスでインスタンスthedayを作ると今日の日付のDateオブジェクトが作られます。続いてインスタンスthedayに対してYoDateクラスで定義した2つの関数とDateクラスのsetFullYear()関数を実行してみます。
フレームアクション:youdate.fla
クラス定義ファイル:YoDate.as
//Dateクラスを拡張する
class YoDate extends Date {
var youbiList:Array = ["日", "月", "火", "水", "木", "金", "土"];
var y:Number;
var m:Number;
var d:Number;
var youbi:String;
var longdate:String;
//コンストラクタ
function YoDate() {
}
//今日の曜日を返す
function getYoubi():String {
youbi = youbiList[this.getDay()];
return (youbi);
}
//長い日付を返す
function getLongDate():String {
y = this.getFullYear();
m = this.getMonth()+1;
d = this.getDate();
youbi = this.getYoubi();
longdate = y+"."+m+"."+d+" ("+youbi+") ";
return (longdate);
}
}
実際にYoDateクラスを試してみます。YoDateクラスはDateクラスを継承しているので、YoDateクラスでインスタンスthedayを作ると今日の日付のDateオブジェクトが作られます。続いてインスタンスthedayに対してYoDateクラスで定義した2つの関数とDateクラスのsetFullYear()関数を実行してみます。
フレームアクション:youdate.fla
var theday:YoDate = new YoDate(); //YoDateクラスで定義した関数 youbi = theday.getYoubi(); trace(youbi);//出力→金 longdate = theday.getLongDate(); trace(longdate);//出力→2005.1.14(金) //Dateクラスの関数 theday.setFullYear(2005, 3, 3); longdate = theday.getLongDate(); trace(longdate);//出力→2005.4.3(日)
子供が親のDNAを受け継ぐように、ほかのクラスのプロパティとメソッドを「継承」す...
子供が親のDNAを受け継ぐように、ほかのクラスのプロパティとメソッドを「継承」することができます。継承にはextendsキーワードを使います。
以下、クラスDentakuAを継承したクラスDentakuBの例です。スーパークラスとサブクラスで言えば、スーバークラスで言えば、スーバークラスDentakuAに対してサブクラスDentakuBとう関係になります。クラスDentakuAには足し算をするtashizan()メソッドがあり、クラスDentakuAを継承しているクラスDentakuBには引き算をするhikizan()メソッドがあります。
クラス定義ファイル:DentakuA.as(スーパークラス)
クラスDentakuBのクラス定義は次のようになります。
クラス定義ファイル:DentakuB.as(サブクラス)
フレームアクション:dentakuAB.fla
スーパークラスのプロパティとメソッドはサブクラスの内部でも利用することができます。次のクラスDetankuCもまたDentakuAをサブクラスにしています。DentakuCのクラス定義にはurine()メソッドがありますが、その中で使っているtashizan()メソッドとkプロパティについての記述は、スーパークラスであるDentakuAのメンバーです。
クラス定義ファイル:DentakuC.as(サブクラス)
次はクラスDentakuCのテストです。
フレームアクション:dentakuACf.fla
以下、クラスDentakuAを継承したクラスDentakuBの例です。スーパークラスとサブクラスで言えば、スーバークラスで言えば、スーバークラスDentakuAに対してサブクラスDentakuBとう関係になります。クラスDentakuAには足し算をするtashizan()メソッドがあり、クラスDentakuAを継承しているクラスDentakuBには引き算をするhikizan()メソッドがあります。
クラス定義ファイル:DentakuA.as(スーパークラス)
class DentakuA {
//プライベード変数
private var k:Number=1.5;
//コンストラクタ
function DentakuA() {
}
//足し算
function tashizan(v1:Number,v2:Number):Number {
var ans=v1 + v2;
return ans;
}
}
クラスDentakuBのクラス定義は次のようになります。
クラス定義ファイル:DentakuB.as(サブクラス)
class DentakuB extends DentakuA {
//コンストラクタ
function DentakuB() {
}
//引き算
function hikizan(v1:Number,v2:Number):Number {
var ans=v1 - v2;
return ans;
}
}
サブクラスのクラスDentakuBのテスト結果です。クラスDentakuBのインスタンスmyDentakuを作り、hikizan()メソッドとtashizan()メソッドを次のようにテストします。フレームアクション:dentakuAB.fla
var myDentaku:DentakuB = new DentakuB(); var ans1 = myDentaku.hikizan(20, 3); var ans2 = myDentaku.tashizan(20, 3); trace(ans1);//出力→17 trace(ans2);//出力→23
スーパークラスのプロパティとメソッドはサブクラスの内部でも利用することができます。次のクラスDetankuCもまたDentakuAをサブクラスにしています。DentakuCのクラス定義にはurine()メソッドがありますが、その中で使っているtashizan()メソッドとkプロパティについての記述は、スーパークラスであるDentakuAのメンバーです。
クラス定義ファイル:DentakuC.as(サブクラス)
class DentakuC extends DentakuA {
//コンストラクタ
function DentakuC() {
}
//売値(足し算×k)
function urine(v1:Number, v2:Number) {
var ans tashizan(v1, v2) * k;
return ans;
}
}
次はクラスDentakuCのテストです。
フレームアクション:dentakuACf.fla
var myDentaku:DentakuC = new DentakuC(); var ans3 = myDentaku.urine(10,40); trace(ans3);//出力→75
publicとprivateは、ほかのクラスやインスタンスからのプロパティ参照や...
publicとprivateは、ほかのクラスやインスタンスからのプロパティ参照やメソッド実行のアクセスに制限を付けるためのキーワードです。デフォルトではメンバーアクセスに制御なく自由に利用できますが、これはpublicキーワードが省略されている状態です。
クラス定義ファイル:BallPub.as
フレームアクション
クラス定義ファイル:BallPub.as
class BallPub {
//パブリック変数
public var mc;
public var dx;
public var dy;
//コンストラクタ
function BallPub(target:MovieClip,x:Number,y:Number) {
this.mc=target;
this.dx=x;
this.dy=y;
}
//ボールの動き
function f1() {
//壁で跳ね返る
if (mc._x < 0 || mc._x > 320) {
dx*= -1;
}
if (mc._y < 0 || mc._y > 240) {
dy*= -1;
}
//ボールの動き
mc._x+= dx;
mc._y+= dy;
}
}
フレームアクション
var obj1:BallPub = new BallPub(ball_a, 5, 4);
//publicなメソッドにアクセスする
this.onEnterFrame = function () {
obj1.f1();
};
//publicなプロパティにアクセスする
//ボタンクリックで移動方向を反転する
myBtn.onPress = function(){
obj1.dx *= -1;
obj1.dy *= -1;
}
クラスのプロパティとメソッドをメンバーといいます。クラスのメンバーにはクラスメン...
クラスのプロパティとメソッドをメンバーといいます。クラスのメンバーにはクラスメンバーとインスタンスメンバーがあります。クラスメンバーはstaticキーワードを使って作成することから静的メンバー(静的メソッドと静的プロパティ)と呼びます。
クラスから作ったインスタンスごとにインスタンスメンバーが作られるのに対し、クラスメンバーは1回しか作られずクラス自身に割り当てられます。そこでクラスのすべてのインスタンスで共通して利用するプロパティやメソッドはクラスメンバーとして作ります。たとえば、インスタンスが何個作られているかというカウンターや共通の割引率などはクラスメンバーにする方が合理的です。
例)
例)フレームアクション
クラスから作ったインスタンスごとにインスタンスメンバーが作られるのに対し、クラスメンバーは1回しか作られずクラス自身に割り当てられます。そこでクラスのすべてのインスタンスで共通して利用するプロパティやメソッドはクラスメンバーとして作ります。たとえば、インスタンスが何個作られているかというカウンターや共通の割引率などはクラスメンバーにする方が合理的です。
例)
class Team {
//クラスメンバー
static var seqNo:Number = 0;
//インスタンスメンバー
var myNo:Number;
var myName:Number;
//コンストラクタ
function Team(memname:String) {
myNo = ++seqNo;
myName = memname;
}
//自分の情報
function who():String {
var info = myNo + "-" + myName;
return info;
}
}
例)フレームアクション
var yo:Team = new Team("渡辺 一樹");
trace(yo.who());//出力→1-渡辺 一樹
クラスパスで指定してあるディレクトリよりも下ならば、クラス定義ファイルをフォルダ...
クラスパスで指定してあるディレクトリよりも下ならば、クラス定義ファイルをフォルダにまとめて入れておくことができます。このときのフォルダのパス(サブディレクトリ)をパッケージと呼びます。パッケージを使うには、クラス定義およびインスタンスを生成する際にクラスパスからのディレクトリ階層、すなわちパッケージ名を指定します。
例)クラス定義ファイル
例)フレームアクション
例)クラス定義ファイル
//パッケージ名を続けてクラス名を書く
class pets.Hana {
//コンストラクタ
function Hana() {
}
//関数
function nakigoe():String {
return "ニャー";
}
}
例)フレームアクション
//Hanaクラスのインスタンスを作る
var hanaObj:pets.Hana = new pets.Hana();
var naki_hana = hanaObj.nakigoe();
trace("hanaは、" + naki_hana);//出力→ hanaは、ニャー
プロパティの初期値をコンスタトラクタ関数の引数で決めるのではなく、プロパティの宣...
プロパティの初期値をコンスタトラクタ関数の引数で決めるのではなく、プロパティの宣言と同時に初期化することもできます。これをインライン初期化と呼びます。
例)
例)
//MyClass02クラス
class MyClass02 {
//プロパティのインライン初期化
var r:Number = 100;//円の半径
var d:Number = 10;//回転速度
var mc:MovieClip;//対象のムービークリップインスタンス
//コンストラクタ
function MyClass02(target:MovieClip) {
mc = target;
}
//常に中心を向くように円周を回る
function circle(x:Number, y:Number):Void {
//d度ずつ回転
mc._rotation += d;
var rad = mc._rotation*Math.PI/180;
//中心座標(x,y)、半径rの円のradラジアン回転した点の座標
mc._x = x+r*Math.cos(rad);
mc._y = y+r*Math.sin(rad);
}
}
AS2.0のクラス定義は、外部ASファイルで行います。ファイル名は、これから定義...
AS2.0のクラス定義は、外部ASファイルで行います。ファイル名は、これから定義するクラスと同名でなければなりません。たとえば、MyClassというクラスを定義する場合にはMyClass.asファイルを作成します。
例)クラス定義ファイルの構造
例)クラス定義ファイルの構造
class クラス名 {
//コンストラクタ関数
function クラス名() {
}
//メソッド
function メドッド名() {
}
//関数
function 関数名() {
return(戻り値);
}
}
ここでのメドッドと関数の違いはreturnで値を返すかどうかの違いです。両者を区別せずにどちらもメソッドあるいは関数と呼ぶこともあります。
マウスクリックがあったらどうする、キー入力があったらどうするというようにイベント...
マウスクリックがあったらどうする、キー入力があったらどうするというようにイベントに応じてスクリプトを実行するには、イベントを受け止めるイベントハンドラを設定します。
例)キー入力に応じて移動する
例)キー入力に応じて移動する
//ball_mcインスタンスにキー入力のイベントハンドラを設定
ball_mc.onKeyDown = function() {
switch (Key.getCode()) {
case Key.LEFT :
this._x -= 10;
break;
case Key.RIGHT :
this._x += 10;
break;
case Key.UP :
this._y -= 10;
break;
case Key.DOWN :
this._y += 10;
break;
}
};
//Keyクラスのイベントリスナーに登録する
Key.addListener(ball_mc);










