メソッドをつける

もっとオブジェクト

 前回作ったフキダシは、属性がついているといっても、ほとんどTextFieldと同じ役割しかしてなかったので、今回は命令(method)をつけて、もう少しオブジェクトらしくしていこう。
 ちなみに、methodの訳語は、手続きとか手法ってことになるんだろうけど、私は命令を当ててたりする、それじゃcommandとかぶるだろー、とも思うけど、オブジェクト指向の人はcommand使いません、だからかぶりません。ええそうですとも。
 昔ながらの、オブジェクトに属していないアクションも、_globalオブジェクトのmethodなんだ、という理解でどうか一つ。
 って、あんまり勝手な定義しない方がいい気もするが…

 大体、次のような仕様で、フキダシオブジェクトを作っていこうかと計画。
 今回は、一つだけでも実装できると成功という、非常に低い志でGO。

命令の定義

 とりあえず、出現・消去アニメでいってみよう。
 visibleを上書きして、フェードするようにするのは、何かと問題がありそうなので、fadein()とfadeout()命令を作るのがいいかな。

 まずは、アニメーションを作っておいて、フレームにfadeinとfadeoutのラベルを設定しておく。ここで命令と同じ名前を設定するのが良いのか悪いのかはよく分からないけど、とりあえず同じものに。
 フキダシの画像はアニメーション用にMCにして、前回より一つ深い階層に置いた。
 アニメーションは、透明・不透明(dissolve)、拡大・縮小(zoom)とかを指定できるとさらにいいが、とりあえずdissolveでいってみるかな。

 もちろん、#iniitclipと#endinitclipの間で定義。
 属性はgetとset命令を作った後、prototype.addPropertyで属性として設定する。
 この時、属性とインスタンス変数の識別子(名前)がいっしょだと、ちゃんと動作しないので、違う名前にしておくこと。ここでは属性をwords、インスタンス変数をwords_とした。
 #initclipでスクリプトを書く時に注意するのは、インスタンス変数を指定する場合にも、thisをつけ忘れないようにすること。

#initclip
//コンストラクタ
function TFBalloonClass() {
}
//ムービークリップを継承
TFBalloonClass.prototype = new MovieClip();
//クラスと、シンボルを結び付ける
Object.registerClass("TFBalloon", TFBalloonClass);
//フェードイン
TFBalloonClass.prototype.fadein = function() {
	this.gotoAndPlay("fadein");
};
// フェードアウト
TFBalloonClass.prototype.fadeout = function() {
	this.gotoAndPlay("fadeout");
};
// 台詞属性
TFBalloonClass.prototype.getWords = function() {
	return this.words_;
};
TFBalloonClass.prototype.setWords = function(s) {
	this.core_mc.balLoon_txt.text = this.words_ = s;
};
TFBalloonClass.prototype.addProperty("words", TFBalloonClass.prototype.getWords, TFBalloonClass.prototype.setWords);
#endinitclip

 さて、実行…。
 あのー、テキストがフェードアウトしないんですけどー。
 参考書参考書と、なになに、ダイナミックテキストはモーショントゥイーンがうまく働かないのか…
 しょうがないので、字の方はvisibleをfalseにして消すことにしよう。うーん、イマイチだが仕方ない。

本日の成果


balloon.fla.zip(8Kbytes)

 今日はここまで。


2003-07-27