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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     子クラスから親クラスのメソッドをTween.onMotionFinished内で呼び出すには?
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
tnagata
Åê¹ÆNo.28449
投稿日時: 2006-9-4 14:08
常連
居住地:
投稿: 140
使用環境:
Flex2,, Flash5
OS:Windows 2000 SP4,,WindowsVista
IE5,6,7
子クラスから親クラスのメソッドをTween.onMotionFinished内で呼び出すには?
いつもお世話になっております。

表題の件で、教えていただきたいのですが

親クラスに定義した
function Test(){ trace("Parent") };

があり
子クラスに
function Motion()
{
    var TweenX:Tween = new Tween(test_mc,  "_x", mx.transitions.easing.Strong.easeOut, 0, 100, 0.5, true);
    TweenX.onMotionFinished = function()
    {
       trace("onMotionFinished");
       Test();
       trace("Child");
    }
}

と、コードを記述したのですがTest()内のtraceが実行されません。
親クラスのメソッドを呼びたいのですが、
TweenXインスタンスのイベントハンドラ内なので
TweenXインスタンスが持つTest()を探しに行っても存在しないので何も表示しない。
という事だと思っています。

親クラスのメソッドをイベントハンドラ内で呼び出すには
どのようにすればよろしいのでしょうか?

ちなみに、
function Motion()
{
    var TweenX:Tween = new Tween(test_mc,  "_x", mx.transitions.easing.Strong.easeOut, 0, 100, 0.5, true);
    TweenX.onMotionFinished = function()
    {
       trace("onMotionFinished");
       Test2();
       trace("Child2");
    }
}
function Test2()
{
    trace("Child1");
}

と子クラス内のメソッドを呼び出してもChild1は表示されませんでした。
tnagata
Åê¹ÆNo.28456
投稿日時: 2006-9-4 14:59
常連
居住地:
投稿: 140
使用環境:
Flex2,, Flash5
OS:Windows 2000 SP4,,WindowsVista
IE5,6,7
Re: 子クラスから親クラスのメソッドをTween.onMotionFinished内で呼び出すには?
解決?しました。

function Motion(){
    var TweenX:Tween = new Tween(test_mc,  "_x", mx.transitions.easing.Strong.easeOut, 0, 100, 0.5, true);
    var obj:Object = this;
    TweenX.onMotionFinished = function()
    {
       trace("onMotionFinished");
       obj.Test();
       trace("Child");
    }
}

という形で一旦thisを退避しておいて、TweenXイベントハンドラ内でそれを利用する。という手法で動きました。

ですが、ちょっとスマートさに欠けるなぁという物で
良い方法があればご教授ください。
野中文雄
Åê¹ÆNo.28457
投稿日時: 2006-9-4 15:00
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 子クラスから親クラスのメソッドをTween.onMotionFinished内で呼び出すには?
スコープがTweenXインスタンスになっていますので、メソッドを定義したクラスのインスタンスへの参照が取れないということですね。
引用:
tnagataさんは書きました:
TweenXインスタンスのイベントハンドラ内なので
TweenXインスタンスが持つTest()を探しに行っても存在しないので何も表示しない。
という事だと思っています。

インスタンスのプロパティでないのに宣言を求められる」をご参照ください。
引用:
ちなみに、
function Motion()
{
    var TweenX:Tween = new Tween(test_mc,  "_x", mx.transitions.easing.Strong.easeOut, 0, 100, 0.5, true);
    // TweenX.onMotionFinished = function()
    TweenX.onMotionFinished = mx.utils.Delegate.create(this, function()
    {
       trace("onMotionFinished");
       Test2();
       trace("Child2");
    })
}
function Test2()
{
    trace("Child1");
}

と子クラス内のメソッドを呼び出してもChild1は表示されませんでした。


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

tnagata
Åê¹ÆNo.28461
投稿日時: 2006-9-4 16:01
常連
居住地:
投稿: 140
使用環境:
Flex2,, Flash5
OS:Windows 2000 SP4,,WindowsVista
IE5,6,7
Re: 子クラスから親クラスのメソッドをTween.onMotionFinished内で呼び出すには?
スマートに解決しました

ヘルプに載っていない事だったので、驚きです。
こんな関数があったとは、、、

Delegateの解説の方を読んでいくと
イベントリスナーを書き分けられるようなサンプルも挙がっていたので
大変参考になりました。

ありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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