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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     カスタムクラスの中での変数のやりとりについて
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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: カスタムクラスの中での変数のやりとりについて
以下の[出力]結果をご確認のうえ、「インスタンスのプロパティでないのに宣言を求められる」をお読みください。
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"] = "ほにゃら";
		tweenName.onMotionFinished = function() {
			// tweenFlag = !tweenFlag;
			trace("クラス内に定義したtweenFlag="+tweenFlag);
		};
	}
}

引用:
baobaoさんは書きました:
というように、tweenFlagがfalseを返してくれません。


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

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: カスタムクラスの中での変数のやりとりについて
正しく理解いただけているのか、若干不安は残るのですが……もし、おわかりだということでしたら、その「tweenName」にクラスのインスタンスを代入すれば、「クラスに定義した変数」は参照できるのではありませんか?それが、先に引用したノートの説明していることです。
引用:
baobaoさんは書きました:
はい、コールバック関数内から参照なしにアクセスすると、

tweenName

を参照しているということはわかりました。

私が理解していない部分は、クラスに定義した変数に対する参照方法だと思います。そもそも、参照方法があるのかということを今調べています。


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

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さんは書きました:
モーション終了後に、フレームアクションでクラスに定義した変数(tweenFlag=false)を受け取ることがこのクラスの目的なのですが、

tweenFlagの初期状態がtrue;
モーション終了後にfalseを返したいのです。


「tweenName」に代入した変数をフレームアクションで取得する方法が分かりません。


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

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: カスタムクラスの中での変数のやりとりについて
問題は単純化すべきです。また、回答はよく読みましょう。

引用:
野中文雄は書きました:
正しく理解いただけているのか、若干不安は残るのですが……もし、おわかりだということでしたら、その「tweenNametweenFlag」にクラスのインスタンスを代入すれば、「クラスに定義した変数」は参照できるのではありませんか?それが、先に引用したノートの説明していることです。

以下のフレームアクションの処理とその[出力]結果がおわかりになりますか?
// フレームアクション
var tweenFlag:Boolean = false;
var obj:Object = new Object();
obj.tweenFlag = tweenFlag;
trace([obj.tweenFlag, tweenFlag]);
obj.tweenFlag = true;
trace([obj.tweenFlag, tweenFlag]);
obj.timeline_mc = this;
obj.timeline_mc.tweenFlag = true;
trace([obj.tweenFlag, tweenFlag]);

引用:
baobaoさんは書きました:
3.アニメーションが終了した時点でtweenFlagはfalseを返す。Tweenアニメーションが終了した時点で終了した通知をフレームアクションで受け取る。
...[中略]...
つまづいている部分はフロー3の部分で、Tweenアニメーションを終了したときに通知を行うonMotionFinishedイベントハンドラメソッドを行ったとき、カスタムクラス内に定義したtweenFlagをfalseに変更したいのですが、出来ないところです。
【tween.asの中身】
	// ...[中略]...
	tweenName["tweenFlag"] =tweenFlag;
	tweenName.onMotionFinished = function() {
		//onMotionFinishedしたタイミングで、
		//クラスで定義したtweenFlagをfalseにする
		
		//下記の状態だと、
		//tweenName["tweenFlag"]=falseと同義だということはわかりました。
		// が、どのようにしてクラスに定義した変数を参照すればよいのか分かりません。
		tweenFlag =false;
		// ...[後略]...


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

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

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