メイン 迷える子羊の部屋【初心者専用】 カスタムクラスの中での変数のやりとりについて | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
baobao | Åê¹ÆNo.38797 投稿日時: 2008-5-14 12:10 |
新米 居住地: 埼玉 投稿: 7
使用環境:
Flash CS3 WinXPsp2 |
カスタムクラスの中での変数のやりとりについて 使用環境 Windws VISTA,Flash8
ActionScriptを始めたばかりなのですが、どうにもこうにもならず質問させていただきました。 tweenクラスを便利に使いやすくするためのクラスを作っています。 コンストラクタ関数を実行し、モーションが終了したときに、通知をするということがしたいのです。 【tween.asの中身】 import mx.transitions.Tween; import mx.transitions.easing.*; class tween{ public var tweenFlag:Boolean=true; //コンストラクタ function tween(tweenName:Tween, mc:MovieClip, att:String, startNum, goalNum, time){ tweenName= new Tween( mc, att, Strong.easeOut, startNum, goalNum, time, true ); tweenName.onMotionFinished=function(){ tweenFlag=!tweenFlag; trace("クラス内に定義したtweenFlag="+tweenFlag); } } } 【フレームアクション】 var myTween:tween=new tween(tweenName, mc, "_x", mc._x, 500, 0.5); this.onEnterFrame=function(){ trace("フレームmyTween.tweenFlag="+myTween.tweenFlag) if(myTween.tweenFlag==false){ trace("モーション終了通知"); delete this.onEnterFrame; } } 出力結果: クラス内に定義したtweenFlag=false フレームmyTween.tweenFlag=true フレームmyTween.tweenFlag=true フレームmyTween.tweenFlag=true ・ ・ ・ というように、tweenFlagがfalseを返してくれません。 おそらく、クラス内での変数のやりとりにミスがあるのではないかと思うのですが、全く手も足も出なくなりました。 初心者な質問で申し訳ないのですが、よろしくお願いします。 |
野中文雄 | Åê¹ÆNo.38798 投稿日時: 2008-5-14 12:54 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: カスタムクラスの中での変数のやりとりについて 以下の[出力]結果をご確認のうえ、「インスタンスのプロパティでないのに宣言を求められる」をお読みください。
引用: baobaoさんは書きました: |
baobao | Åê¹ÆNo.38799 投稿日時: 2008-5-14 14:02 |
新米 居住地: 埼玉 投稿: 7
使用環境:
Flash CS3 WinXPsp2 |
Re: カスタムクラスの中での変数のやりとりについて 野中様
すばやいお返事ありがとうございました。 クラスに定義した変数は、コールバック関数によって書き換えることができないということなのでしょうか。 的外れなことを申しているようであれば、お許しください。 私の知識では、100%理解するには少し時間がかかりそうですので、勉強してみます。 |
野中文雄 | Åê¹ÆNo.38800 投稿日時: 2008-5-14 14:29 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: カスタムクラスの中での変数のやりとりについて たとえば、米国Adobeのカスタマーサービスの電話番号は800-833-6687です。もちろん、この番号をそのまま日本からかけてもつながりません。それは、米国Adobeには「日本から電話ができない」ということではありません。国内と同じかけ方ではなく、国際電話の手順を踏まなければならないというだけです。
コールバック関数内から参照なしにアクセスすると、どこにある変数を取出しているかはおわかりになりましたか? 参考: F-site「ActionScript 2.0で関数内のスコープを確かめる」 引用: baobaoさんは書きました: |
baobao | Åê¹ÆNo.38801 投稿日時: 2008-5-14 15:28 |
新米 居住地: 埼玉 投稿: 7
使用環境:
Flash CS3 WinXPsp2 |
Re: カスタムクラスの中での変数のやりとりについて 野中様
丁寧なお返事ありがとうございました。 引用: 野中さんは書きました: はい、コールバック関数内から参照なしにアクセスすると、 tweenName を参照しているということはわかりました。 私が理解していない部分は、クラスに定義した変数に対する参照方法だと思います。そもそも、参照方法があるのかということを今調べています。 |
野中文雄 | Åê¹ÆNo.38802 投稿日時: 2008-5-14 15:44 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: カスタムクラスの中での変数のやりとりについて
|
baobao | Åê¹ÆNo.38803 投稿日時: 2008-5-14 16:58 |
新米 居住地: 埼玉 投稿: 7
使用環境:
Flash CS3 WinXPsp2 |
Re: カスタムクラスの中での変数のやりとりについて 野中様
何度も同じような質問を繰り返してしまい申し訳ありません。 「tweenName」にクラスのインスタンスを代入すれば、「クラスに定義した変数(tweenFlag)」は参照できました。ありがとうございます。 モーション終了後に、フレームアクションでクラスに定義した変数(tweenFlag=false)を受け取ることがこのクラスの目的なのですが、 tweenFlagの初期状態がtrue; モーション終了後にfalseを返したいのです。 「tweenName」に代入した変数をフレームアクションで取得する方法が分かりません。 |
野中文雄 | Åê¹ÆNo.38805 投稿日時: 2008-5-14 19:01 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: カスタムクラスの中での変数のやりとりについて 何がおわかりにならないのか、わかりかねます。どこまで理解され、何はどのようにしておできになり、どこが問題なのかを、もっと丁寧にご説明ください。
「モーション終了」は、Tween.onMotionFinishedイベントで処理します。「クラスに定義した変数(tweenFlag=false)」の「参照」はおできになったと理解しています。インスタンスの「変数をフレームアクションで取得」するには、「インスタンス.変数(プロパティ)」でアクセスします。 引用: baobaoさんは書きました: |
baobao | Åê¹ÆNo.38806 投稿日時: 2008-5-14 21:10 |
新米 居住地: 埼玉 投稿: 7
使用環境:
Flash CS3 WinXPsp2 |
Re: カスタムクラスの中での変数のやりとりについて 野中様
私の説明不足で混乱させてしまい、大変申し訳ありませんでした。 深く反省しております。 最初から説明させていただくと。 Tweenクラスを利用したカスタムクラスを作ることが目的です。 フローの流れ 1.カスタムクラス tweenを読み込む 2.コンストラクタ関数を実行して、Tweenアニメーションを行う。アニメーションが始まるタイミングでカスタムクラス内に定義した変数:tweenFlagはtrueを返す。 3.アニメーションが終了した時点でtweenFlagはfalseを返す。Tweenアニメーションが終了した時点で終了した通知をフレームアクションで受け取る。 4.通知のチェックをフレームアクションonEnterFrameイベントハンドラメソッドでアニメーションが始まったタイミングで実行する。変数:tweenFlagを監視し、tweenFlagがfalseになった時点でonEnterFrameは終了する。 という流れです。 つまづいている部分はフロー3の部分で、Tweenアニメーションを終了したときに通知を行うonMotionFinishedイベントハンドラメソッドを行ったとき、カスタムクラス内に定義したtweenFlagをfalseに変更したいのですが、出来ないところです。 【tween.asの中身】 import mx.transitions.Tween; import mx.transitions.easing.*; class tween { public var tweenFlag:Boolean = true; //コンストラクタ function tween(tweenName:Tween, mc:MovieClip, att:String, startNum, goalNum, time) { tweenName = new Tween(mc, att, Strong.easeOut, startNum, goalNum, time, true); tweenName["tweenFlag"] =tweenFlag; tweenName.onMotionFinished = function() { //onMotionFinishedしたタイミングで、クラスで定義したtweenFlagをfalseにする //下記の状態だと、tweenName["tweenFlag"]=falseと同義だということはわかりました。が、どのようにしてクラスに定義した変数を参照すればよいのか分かりません。 tweenFlag =false; }; } } 【フレームアクション】 import tween; var myTween:tween=new tween(tweenName, mc, "_x", mc._x, 500, 0.5); //以下アニメーションの終了をチェックする this.onEnterFrame=function(){ if(myTween.tweenFlag==false){ trace("アニメーション終了"); delete this.onEnterFrame; } } アニメーション終了後にフレームアクションでアニメーション終了の通知を受けることが出来ればよいわけなのですが、、、 この方法には無理があって、これ以外の方法があるようでしたら、恐縮ながらご教授いただきたいなと存じております。 お手数ですが、 よろしくお願いいたします。 |
野中文雄 | Åê¹ÆNo.38807 投稿日時: 2008-5-14 21:43 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: カスタムクラスの中での変数のやりとりについて 問題は単純化すべきです。また、回答はよく読みましょう。
引用: 野中文雄は書きました: 以下のフレームアクションの処理とその[出力]結果がおわかりになりますか?
引用: baobaoさんは書きました: |
(1) 2 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |