トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     ビルトインメソッドのカスタム化について
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
youich
Åê¹ÆNo.11423
投稿日時: 2004-10-10 14:34
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: ビルトインメソッドのカスタム化について
引用:

+39さんは書きました:
いつもありがとうございます。
解決しました。
で、その先の処理として"onLoad"自体をカスタムできないか?と考えています。元々xmlは"onData"があるので現在はそれを経由して処理していますが、"onLoad"自体をカスタムすることは可能なのでしょうか?

今は"onDataを経由して"やっておられるんですよね?
ならばそこで無条件に行いたい処理を記述してから"onLoad"を呼ぶような
サブクラスを作ればいいと思うのですが、、、

思いっきりはずしてたらすみません。(笑)

class AAA extends XML {
	var title:String;
	function onData(src) {
		if (src == null) {
			onLoad(false);
		} else {
			parseXML(src);
			defaultProcess();
			loaded = true;
			onLoad(true);
		}
	}
	function defaultProcess() {
		trace("無条件に行いたい処理");
		this.title = this.firstChild.firstChild.nodeValue;
	}
}


引用:

現在実装可能な形のイメージは
タイムライン上:
hogehoge = new AAA();
hogehoge.onLoad2 = function(result){
    //読み込み完了後にユーザが実行するアクション
    //この関数名をonLoadで定義できないか?
    trace(this);
}
hogehoge.load(***);

クラス内:
class AAA extends XML{
    var title:String;
    public function load(url:String){
        super.load(FILE_PATH + url);
    }
    public function onLoad(result){
        trace("無条件に行いたい処理");
        this.title = this.firstChild.firstChild.nodeValue;
        //ユーザー定義の処理を実行
        onLoad2(result);
    }
}


----------------
- yo

+39
Åê¹ÆNo.11445
投稿日時: 2004-10-12 10:51
新米
居住地:
投稿: 14
使用環境:
XP + MX2004
Re: ビルトインメソッドのカスタム化について
いつもありがとうございます。

XMLの場合はonDataで問題ないのですが、興味があるのはonReleaseとか別のイベント系の場合ですね。
たとえば既存のコンテンツのonReleaseイベント全てに何かしらの処理を追加してくれと要望があった場合、タイムラインに書かれてあるonReleaseイベントの記述を修正することなく、処理を追加したりすることはできるのだろうか?ということを考えています。

つまり「全てボタンをonReleaseしたときに"trace("ahoaho");"を実行して欲しいと要望があったときにclassでonRelease自体をカスタムできたら効率があがるかなあ?という感じです。


----------------

nao
Åê¹ÆNo.11476
投稿日時: 2004-10-13 10:57
職人
居住地:
投稿: 208
使用環境:
WinXP Pro
Flash8 Professional
Re: ビルトインメソッドのカスタム化について
ちょっと見当違いかもしれませんが…

[CustomFunc.as]
class CustomFunc {
	/**
	* Constructor
	*/
	private function CustomFunc() {
	}

	/**
	* Custom onRelease
	*/
	static public function customOnRelease(mc:MovieClip):Void {
		var originalOnRelease = mc.onRelease;

		mc.onRelease = function() {
			originalOnRelease();
			// 追加したい処理
			trace('custom');
		}
	}
}


[_root 1frame]
test_mc.onRelease = function() {
	trace('original');
};

CustomFunc.customOnRelease(test_mc);


ってなのはどうでしょうか?


----------------
nao [seto@graffiti-web.org]

youich
Åê¹ÆNo.11536
投稿日時: 2004-10-15 15:14
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: ビルトインメソッドのカスタム化について
引用:

[CustomFunc.as]
class CustomFunc {
	/**
	* Constructor
	*/
	private function CustomFunc() {
	}

	/**
	* Custom onRelease
	*/
	static public function customOnRelease(mc:MovieClip):Void {
		var originalOnRelease = mc.onRelease;

		mc.onRelease = function() {
			originalOnRelease();
			// 追加したい処理
			trace('custom');
		}
	}
}


[_root 1frame]
test_mc.onRelease = function() {
	trace('original');
};

CustomFunc.customOnRelease(test_mc);


ってなのはどうでしょうか?

σ(^^もnaoさんとおんなじようなことを考えましたが、
+39さんはおそらくインスタンスごとにonReleaseをカスタム化するんじゃなくて、
すべてのonReleaseを捉えてフックしようと考えてるんだと思います。

MovieClipだけだったらonLoadでなんとかなるかなと考えましたけど
MovieClip.prototype.onLoad = function(){
	if(this.onRelease != undefined){
		this.orig_onRelease = this.onRelease;
		this.onRelease = function(){
			trace('before');
			this.orig_onRelease();
		}
	}
}


上のようにMovieClip.prototypeにonLoadを定義しても
ムービークリップのクリップイベントになにがしかの記述がなければ
呼ばれないですね。。onLoadってこういう仕様でしたっけ?


----------------
- yo

nao
Åê¹ÆNo.11557
投稿日時: 2004-10-16 23:46
職人
居住地:
投稿: 208
使用環境:
WinXP Pro
Flash8 Professional
Re: ビルトインメソッドのカスタム化について
MovieClip.prototype.onLoad = function(){
	if(this.onRelease != undefined) {
		this.orig_onRelease = this.onRelease;
		this.onRelease = function(){
			trace('before');
			this.orig_onRelease();
		}
	}
}

あ,なるほど…

試してみたらonLoadがよばれたときってthis.onReleaseがundefinedになってるようなきがするんですが.


----------------
nao [seto@graffiti-web.org]

+39
Åê¹ÆNo.11581
投稿日時: 2004-10-18 15:21
新米
居住地:
投稿: 14
使用環境:
XP + MX2004
Re: ビルトインメソッドのカスタム化について
すいません、なんか急に体調崩して入院しております・・。
今外出許可貰って書き込んでいますが、復帰して落ち着いたら検証しますう。ほんとすいませんです。


----------------

salvox
Åê¹ÆNo.11589
投稿日時: 2004-10-19 4:04
常連
居住地: 東京都
投稿: 73
使用環境:
Windows2000
FlashMX
テキストエディター:EmEditor
onReleaseの受け取り・・・例えば
ど?も、Salvox(サルヴォックス)です。僕も興味のある話題だったので、参加させて頂きます。

確かに、onReleaseイベント ひいては、ボタンイベントに
後からクリック音を追加してくれだの、折角追加したクリック音を
やっぱ要らないだのという要求は多いので、僕もボタンイベントを
一律で管理するか、onReleaseイベントが発生したかどうかを、他のオブジェクトから参照できないものかと、色々考えていました。

確かに、onLoadは、目の上のタンコブでしたけど、
Loadされた瞬間に実行されるので、フレームイベントにonReleaseを書いていると、常にundefinedになってしまいますね。

そこで、こ?いうのは、ど?でしょう?
この再、onReleaseでボタンイベントを設定するのは止めて、
例えば、onRelease2という getter/setterを作るってのは。
コードは以下のような感じ

	/***************************************************************************

		イベントハンドラのgetter/setter化 

	***************************************************************************/

         // onRelease のsetter
	MovieClip.prototype.setOnRelease = function( objFunc ){
		this.__onRelease = objFunc;
		this.onRelease   = this.func_onRelease;
	};

         // 不要なのかもしれないけど、getter
	MovieClip.prototype.getOnRelease = function(){
		return this.__onRelease;
	};

         // 実際のonReleaseイベントで呼び出される関数
	MovieClip.prototype.func_onRelease = function(){
		this.__onRelease();
		/* 任意の共通処理を以下に */
		trace('onRelease is Called');
	};

         // onRelease2というgetter setterの設定 
	MovieClip.prototype.addProperty( 'onRelase2',MovieClip.prototype.getOnRelease,MovieClip.prototype.setOnRelease);


っといった感じで、
各MCには、onRelease2 でボタンイベント設定してあげる。
書き方は通常どおり以下のような感じ

this.onRelease2 = function(){
trace('release event');
};

一瞬で書いたコードなので、間違いもあるかと思いますし、
誰かこれを更に発展して頂ければもっと幸いです。


----------------
(C)SalvoxStudioStation

salvox
Åê¹ÆNo.11590
投稿日時: 2004-10-19 4:34
常連
居住地: 東京都
投稿: 73
使用環境:
Windows2000
FlashMX
テキストエディター:EmEditor
自分の投稿に関して 追加
あと、先ほど、僕が書いた getter/setterのようにしておけば、
サイト全体を通してボタンイベントが共通である場合は、
_rootに空の関数オブジェクトを一個作って、

this.onRelease2 = _root.dammyRelease; ←関数オブジェ

として、空の処理を実行。
共通処理を、MovieClip.prototype.func_onReleaseに書いておいけば、恐らくメモリーも節約できるかな?(多分)


----------------
(C)SalvoxStudioStation

nao
Åê¹ÆNo.11593
投稿日時: 2004-10-19 11:15
職人
居住地:
投稿: 208
使用環境:
WinXP Pro
Flash8 Professional
Re: ビルトインメソッドのカスタム化について
引用:
すいません、なんか急に体調崩して入院しております・・。
今外出許可貰って書き込んでいますが、復帰して落ち着いたら検証しますう。ほんとすいませんです。

あらら お大事に.m(_ _)m

ちょっと要望とは違うかもしれませんがMCを探して当て込んでいく方法です.
特定の階層のみに適応したい場合はいいかもしれませんが…
function addCustumOnRelease(target:MovieClip) {
    for (var prop in target) {
        if (target[prop] instanceof MovieClip) {
            if (target[prop].onRelease != undefined) {
                target[prop].originalOnRelease = target[prop].onRelease;
    
                target[prop].onRelease = function() {
                    this.originalOnRelease();
                    trace('custum');
                }
            }
            else {
                arguments.callee(target[prop]);
            }
        }
    }
}

addCustumOnRelease(_root);


----------------
nao [seto@graffiti-web.org]

youich
Åê¹ÆNo.11596
投稿日時: 2004-10-19 12:46
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: onReleaseの受け取り・・・例えば
引用:


確かに、onLoadは、目の上のタンコブでしたけど、
Loadされた瞬間に実行されるので、フレームイベントにonReleaseを書いていると、常にundefinedになってしまいますね。

あ、まさしく(笑)
Naoさんも言っとりましたがこりゃだめですね、、onLoadは没

引用:

そこで、こ?いうのは、ど?でしょう?
この再、onReleaseでボタンイベントを設定するのは止めて、
例えば、onRelease2という getter/setterを作るってのは。
コードは以下のような感じ



なるほど、addPropertyを使うのは名案ですね。
しかし単にonReleaseをaddPropertyするというのはだめなんでしょうか?
なんか忘れてるよーな気もするけど。(^^;


bar = function (func) {
	this._onRelease = func;
};
foo = function () {
	trace("before");
	this._onRelease();
	trace("after");
};
MovieClip.prototype.addProperty("onRelease", foo, bar);



----------------
- yo

« 1 (2) 3 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops