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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     音量バーが一つ上階層のボタンやMCに影響を与える
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
mizota
Åê¹ÆNo.10749
投稿日時: 2004-9-12 23:55
新米
居住地: 東京都
投稿: 8
使用環境:
WinXP,Flash MX2004
音量バーが一つ上階層のボタンやMCに影響を与える
お世話さまでございます。
溝田と申します。

先日よりFLASHでFLASHサイトを構築中にバグ?みたいな物が発生して先に進めない状態で困っております。

index.swfがtest2.swfを読み込むようになっています。

そのtest2.swfが誤作動起こしてしまいます。
本来タブが画面下にありましてそのタブをクリックすることで
音楽制御画面等が現れる用になっています。(下から上に表示)
そのミュージックプレイヤーには音量バーと音楽セレクトがある画面です。

誤作動内容は
・読み込まれた瞬間に何故かsoundobjectがあるはずなのに音量バーをいじると音楽がとまる(リロード三回に一回くらい)
・表示させるためのタブをクリックすると表示できなくなる。
(表示画面が動かなくなる)

かれこれ一週間色んな本や手を加えてみましたが分かりませんでした。。スクリプト共々アップしましたので申し訳ありませんが動作するようお教えください;;

http://t2sec.sub.jp/test.html
http://t2sec.sub.jp/index.fla
http://t2sec.sub.jp/test2.fla

自分の思い通り動くときと動かないときがあって非常に気持ちが悪いのです。。どうぞよろしくお願いします!
youich
Åê¹ÆNo.10750
投稿日時: 2004-9-13 3:10
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: 音量バーが一つ上階層のボタンやMCに影響を与える
引用:


誤作動内容は
・読み込まれた瞬間に何故かsoundobjectがあるはずなのに音量バーをいじると音楽がとまる(リロード三回に一回くらい)

test2.swfのvolbarのスクリプトで、、
_root.asyoulike.asyoulike_mc.musical.mviwer.?

ってなってるところは、もしかして全部
_root.asyoulike.asyoulike_mc.mviwer.?
の間違いじゃないです?

ここは_rootからのパスを使う必要性があるのかどうか私にはよくわかりませんが
おなじことなら以下のようにしたほうが簡単な気がします。
function soundvalue() {
	this.onEnterFrame = function() {
		maxvolume = guide._width;
		nowposition = slider._x+guide._width/2;
		nVol = Math.floor((100/maxvolume)*nowposition);
		if (_root.selectsound == 1) {
			_root.soundObj1.setVolume(nVol);
			this._parent.nCurrentVolume1 = _root.soundObj1.getVolume();
			this._parent.Cvol1._visible = 1;
			this._parent.Cvol2._visible = 0;
			this._parent.Cvol3._visible = 0;
		} else if (_root.selectsound == 2) {
			_root.soundObj2.setVolume(nVol);
			this._parent.nCurrentVolume2 = _root.soundObj2.getVolume();
			this._parent.Cvol1._visible = 0;
			this._parent.Cvol2._visible = 1;
			this._parent.Cvol3._visible = 0;
		} else if (_root.selectsound == 3) {
			_root.soundObj3.setVolume(nVol);
			this._parent.nCurrentVolume3 = _root.soundObj3.getVolume();
			this._parent.Cvol1._visible = 0;
			this._parent.Cvol2._visible = 0;
			this._parent.Cvol3._visible = 1;
		}
	};
}


引用:


・表示させるためのタブをクリックすると表示できなくなる。
(表示画面が動かなくなる)

よく解りませんが、close_btのスクリプトで
on (press) {
	if (_root.asyou == 1) {
		_root.asyoulike.play();
		if (_root.close_bt.getDepth == 10002) {
			_root.close_bt.swapDepths(10001);
			_root.asyoulike.swapDepths(10002);
		} else {
			_root.asyoulike.swapDepths(10002);
		}
	} else if (_root.asyou == 2) {
		_root.asyoulike.play();
	}
}

_root.close_bt.getDepthが"()"を付け忘れているために
ファンクションとして機能してないのが原因ということはないですか?


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

mizota
Åê¹ÆNo.10757
投稿日時: 2004-9-13 12:05
新米
居住地: 東京都
投稿: 8
使用環境:
WinXP,Flash MX2004
Re: 音量バーが一つ上階層のボタンやMCに影響を与える
youichさん早速のご返信ありがとうございます。

引用:
youichさんは書きました:

誤作動内容は
・読み込まれた瞬間に何故かsoundobjectがあるはずなのに音量バーをいじると音楽がとまる(リロード三回に一回くらい)
test2.swfのvolbarのスクリプトで、、
_root.asyoulike.asyoulike_mc.musical.mviwer.?

ってなってるところは、もしかして全部
_root.asyoulike.asyoulike_mc.mviwer.?
の間違いじゃないです?


ここは以前自分がattachさせてmviewerを表示させていた痕跡です。自分の方では変更していたのですがアップしたものは変更していませんでした。ご指摘すみませんです。

ここは、困惑した際に(自分の中の)確実性を高めるためにflaファイルのものは_rootから書き直したものです。分かりにくくて申し訳ないです。
かなりすっきりで驚きです。この場合thisっているんですか??_parentだけでいいと自分は思ったのですが??

引用:
_root.close_bt.getDepthが"()"を付け忘れているために
ファンクションとして機能してないのが原因ということはないですか?

動いてる時は問題なく動いているので()は関係ないかな?と思っておりました。変更した所、やはりまだ動かないときがあるので他に原因があるかもしれません

あと問題としてサウンドが読み込まれないときがあるのはこれはただの読込みミスなんでしょうか?回避方法などありましたら教えてもらえればと思います。

引き続き動作検証しておりますのでよろしければお付き合いくださいませ。
youich
Åê¹ÆNo.10758
投稿日時: 2004-9-13 14:39
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: 音量バーが一つ上階層のボタンやMCに影響を与える
引用:

ここは以前自分がattachさせてmviewerを表示させていた痕跡です。自分の方では変更していたのですがアップしたものは変更していませんでした。ご指摘すみませんです。

あ、すいません?音の消える原因はここではなかったですか。
引用:

ここは、困惑した際に(自分の中の)確実性を高めるためにflaファイルのものは_rootから書き直したものです。分かりにくくて申し訳ないです。
かなりすっきりで驚きです。この場合thisっているんですか??_parentだけでいいと自分は思ったのですが??

いえ、_parentだけでもいいですよ。
上の方の guide sliderもthis.guide,this.sliderのことですね。
maxvolume = guide._width;
nowposition = slider._x+guide._width/2;


困惑されるというか、ごちゃっとなってる原因は
いろんな所で_root.soundObjや_root.select等々の値を触ってるのもひとつ原因じゃないかと思います。
各パーツが受けもつべき責任を明確にしてなるべく小さい範囲で
受け持つ責任は完結するようにしたほうがすっきるするのではないかと。。。


引用:

動いてる時は問題なく動いているので()は関係ないかな?と思っておりました。変更した所、やはりまだ動かないときがあるので他に原因があるかもしれません

引用:
・表示させるためのタブをクリックすると表示できなくなる。
(表示画面が動かなくなる)

タブのほうは、
http://t2sec.sub.jp/test.html
こちらでは(MacOSX firefox)うまく動いてるようなんで、表示できないというのがよくわからないですー。


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

mizota
Åê¹ÆNo.10760
投稿日時: 2004-9-13 15:28
新米
居住地: 東京都
投稿: 8
使用環境:
WinXP,Flash MX2004
Re: 音量バーが一つ上階層のボタンやMCに影響を与える
引用:

困惑されるというか、ごちゃっとなってる原因は
いろんな所で_root.soundObjや_root.select等々の値を触ってるのもひとつ原因じゃないかと思います。
各パーツが受けもつべき責任を明確にしてなるべく小さい範囲で
受け持つ責任は完結するようにしたほうがすっきるするのではないかと。。。

な、なるほど。というか基本ですよね…オブジェクト指向
色々他にも読み込む物があって制御してるんですけどオブジェクトが多くなりすぎて結構困っている状況なのです。汗

引用:
タブのほうは、
http://t2sec.sub.jp/test.html
こちらでは(MacOSX firefox)うまく動いてるようなんで、表示できないというのがよくわからないですー。

キャッシュがある場合はうまく動くのですが、キャッシュをクリアして見ると動かなくなる現象が起こってしまいます。
正確には上には上がる(制御パネルを出す)のですが
制御パネルが下がらない現象が起こってしまいます。
youich
Åê¹ÆNo.10762
投稿日時: 2004-9-13 19:23
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: 音量バーが一つ上階層のボタンやMCに影響を与える
引用:
色々他にも読み込む物があって制御してるんですけどオブジェクトが多くなりすぎて
結構困っている状況なのです。汗

ばーっと考えて、サウンドを管理するクラス(ロードやボリューム等)を
作っておけばいいんじゃないかな、、、スライダー(vall)は自分の変化を
それに知らせるだけ、selectm(music_title)は音楽が選択されたら選択されたことを
それに知らせるだけにしておいて後のことはそのクラスで処理をするように
(サウンドのボリュームを変えるとかイコライザーに変化を知らせるとか。。)
しておけばすっきりするように思います。

引用:
正確には上には上がる(制御パネルを出す)のですが
制御パネルが下がらない現象が起こってしまいます。

動作のほうはやっぱりよくわからないんですが、
ここもタブに配置されてるボタンが行ってることは
_root(index.fla)がやる(責任を負う)ほうが適切なんじゃないんだろうかと思います。

on (press) {
	if (_root.asyou == 1) {
		_root.asyoulike.play();
		if (_root.close_bt.getDepth == 10002) {
			_root.close_bt.swapDepths(10001);
			_root.asyoulike.swapDepths(10002);
		} else {
			_root.asyoulike.swapDepths(10002);
		}
	} else if (_root.asyou == 2) {
		_root.asyoulike.play();
	}
}


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

mizota
Åê¹ÆNo.10764
投稿日時: 2004-9-13 21:22
新米
居住地: 東京都
投稿: 8
使用環境:
WinXP,Flash MX2004
Re: 音量バーが一つ上階層のボタンやMCに影響を与える
引用:

youichさんは書きました:
ばーっと考えて、サウンドを管理するクラス(ロードやボリューム等)を
作っておけばいいんじゃないかな、、、スライダー(vall)は自分の変化を
それに知らせるだけ、selectm(music_title)は音楽が選択されたら選択されたことを
それに知らせるだけにしておいて後のことはそのクラスで処理をするように
(サウンドのボリュームを変えるとかイコライザーに変化を知らせるとか。。)
しておけばすっきりするように思います。

クラスの考え方は慣れていないですけどなんとなく感覚は分かりました。ようするにサウンドクラスを作成してサウンド関連処理はすべてそのクラス内で行えばOKって事ですよね?
スライダなどはすべて値を渡すのみに徹する。


引用:
動作のほうはやっぱりよくわからないんですが、
ここもタブに配置されてるボタンが行ってることは
_root(index.fla)がやる(責任を負う)ほうが適切なんじゃないんだろうかと思います。

on (press) {
	if (_root.asyou == 1) {
		_root.asyoulike.play();
		if (_root.close_bt.getDepth == 10002) {
			_root.close_bt.swapDepths(10001);
			_root.asyoulike.swapDepths(10002);
		} else {
			_root.asyoulike.swapDepths(10002);
		}
	} else if (_root.asyou == 2) {
		_root.asyoulike.play();
	}
}


タブ(制御パネル)上下のスクリプトもindexにすべてクラスで内在させておけばって事ですかね。

オブジェクト指向の感覚は分かるんですがうまく作れずに構造的に作ってしまっています
上のコードの場合はgetDepthなどはすべてindexの関数内に入れてしまいあくまで

on(press){
control_panel_move();
}


とするのが正しいと言うことですかね??変な質問ですみません。。
youich
Åê¹ÆNo.10770
投稿日時: 2004-9-14 2:01
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: 音量バーが一つ上階層のボタンやMCに影響を与える
引用:
クラスの考え方は慣れていないですけどなんとなく感覚は分かりました。ようするにサウンドクラスを作成してサウンド関連処理はすべてそのクラス内で行えばOKって事ですよね?
スライダなどはすべて値を渡すのみに徹する。

徹するというか、各パーツ(MovieClipやswfやオブジェクト)がお互いの事をできるだけ知らないようにすれば
あるパーツのバグはそこだけのものになりやすいし、作る時にはそこの部分ことだけ考えて作ればいいし
パーツ単位での変更や交換も他の所に影響を与えにくい、、、
といういうことはバグの起こる場所も特定されやすく、変更や交換もしやすいということにもなるんじゃないでしょうか?
引用:
ようするにサウンドクラスを作成して
それは別にクラスじゃなくてもムービークリップ(_rootでもas_you_likeでも)でも同じに考えていいんじゃないかと、
ムービーがどうゆう作りになるのか解らないのでなんともいえませんが、例えば
_rootがsoundをしきり、m_viewrがselectm,vall,ikoraizaをしきるような形にしようとする
そこでas_you_like#m_viewr#ストップボタンのスクリプトで考えてみると、
現在のような_root.sound1、_root.sound2,_root.sound3を止め
_root.mykabutocolor(SharedObject?)のデータを変更してイコライザーとセレクトボタンを
クリアーするというコードを直接書くのではなく
そこではmviwerのsoundStopを呼ぶだけにする、
m_viewrは自分の管轄のイコライザーとセレクトの表示については制御するが
それ以外のことはsoundManager(勝手に作りました)にまかせる
って言うような感じで、どんなもんでしょう、、、、あかんかなぁ(笑)

on(press){
	soundStop();
}
mviwer.soundStop = function(){
	if(this.soundManager == undefined){
		this.soundManager = _root;
	}
	this.soundManager.soundStop();
	this.ikoraiza.clear();
	this.selectm.clear();
}
mviwer.displayClear = function(){
	this.ikoraiza.clear();
	this.selectm.clear();
}
mviwer#ikoraiza.clear = function(){
	this.gotoAndStop(4);
}
mviwer#selectm.clear = function(){
	...
	...
}
_root#soundStop = function(){
	soundObj1.stop();
	soundObj2.stop();
	soundObj3.stop();
	mykabutocolor.data.select_s = 4;
	mykabutocolor.flush();
	selectsound = 4;
}


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

mizota
Åê¹ÆNo.10863
投稿日時: 2004-9-16 23:17
新米
居住地: 東京都
投稿: 8
使用環境:
WinXP,Flash MX2004
Re: 音量バーが一つ上階層のボタンやMCに影響を与える
返事遅れました。すみません。
youichさんの以下コメント後、サイトのFLASHの作りを見直して自分の事は自分でやれるような処理に変更する事を目標に作業しておりました。
引用:

youichさんは書きました:
徹するというか、各パーツ(MovieClipやswfやオブジェクト)がお互いの事をできるだけ知らないようにすれば
あるパーツのバグはそこだけのものになりやすいし、作る時にはそこの部分ことだけ考えて作ればいいし
パーツ単位での変更や交換も他の所に影響を与えにくい、、、
といういうことはバグの起こる場所も特定されやすく、変更や交換もしやすいということにもなるんじゃないでしょうか?

この考え方で処理を行っていけば確かに動きなんかに対しても
バグが発見しやすくなりました!!
やはり開発する側としてはこの考え方が必須ですね^^;

引用:

それは別にクラスじゃなくてもムービークリップ(_rootでもas_you_likeでも)でも同じに考えていいんじゃないかと、
ムービーがどうゆう作りになるのか解らないのでなんともいえませんが、例えば
_rootがsoundをしきり、m_viewrがselectm,vall,ikoraizaをしきるような形にしようとする
そこでas_you_like#m_viewr#ストップボタンのスクリプトで考えてみると、
現在のような_root.sound1、_root.sound2,_root.sound3を止め
_root.mykabutocolor(SharedObject?)のデータを変更してイコライザーとセレクトボタンを
クリアーするというコードを直接書くのではなく
そこではmviwerのsoundStopを呼ぶだけにする、
m_viewrは自分の管轄のイコライザーとセレクトの表示については制御するが
それ以外のことはsoundManager(勝手に作りました)にまかせる
って言うような感じで、どんなもんでしょう

以上のコメントを受けてかなり組み方意識しました。
受け渡し方は何となく理解して他のプログラムも書き換える事ができましたが、クラスというものはどのような物かよく分からないです。個別に処理を持つイベントハンドラやfunctionで関数化するのとはまた違うとの事?と位ですね…
ともあれ、今回のこれをきっかけにスクリプトの組み方の意識が変わりそうです。ありがとうございます。

スクリプト関連の本を買ってちょっときちんと勉強しようと思っております。何か今回のようなオブジェクトやクラスの考え方を理解しやすそうなオススメの書籍なんかあれば教えて頂きたいです。

今回は長い間お付き合い頂きありがとうございます。
今後も何かあればよろしくお願いいたします
youich
Åê¹ÆNo.10891
投稿日時: 2004-9-17 15:35
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: 音量バーが一つ上階層のボタンやMCに影響を与える
引用:

この考え方で処理を行っていけば確かに動きなんかに対しても
バグが発見しやすくなりました!!

それは、少しでもお役に立ててよかったです。。

ちょうど今読んでるサスペンスにはどんな巨大な
プロジェクトにもチーフとして隅から隅まで熟知している
という天才女性プログラマが登場しますが、我々凡人としましては
適当な範囲で小分けしたものを完結させていきながら作っていくと
いうことが必要になってくるんじゃないかと思います。
(ちなみに彼女は嫉妬にくるい、なぜかハッカーとなって天才とは思えない、
しょぼい捕まり方で終わるのですが(^^;)
引用:

受け渡し方は何となく理解して他のプログラムも書き換える事ができましたが、
クラスというものはどのような物かよく分からないです。
個別に処理を持つイベントハンドラやfunctionで関数化するのとはまた違うとの事?と位ですね…

で、凡人の知能が及ぶ程度の適当な範囲を作る為にクラスというものがあります。
特別に難しい物だとかアニメーションFlashとは全然違ったものだとかではありません。
ムービークリップをひとつの範囲と考え
ムービークリップシンボルのタイムラインという器の中にプロパティやfunctionを書いて行きます。
クラスをひとつの範囲と考えasファイルに、class(キーワード)という器の中に
プロパティやfunctionをasファイルに書いて行きます。
どちらも同じように考えていいと思います、そんなに難しくないですよね。。

例えばメンバーデータのxmlファイルを、命令が有ればloadして、
loadしたら勝手に解析してくれている、メンバー一覧がほしければ
getNameList();と命令すれば一覧を返しある人のデータがほしければ
getData("..");と命令すればその人のデータを返してくれる"物"を作ろうとすると。
members.xml
<list>
	<member name="AAA" data="111"/>
	<member name="BBB" data="222"/>
	<member name="CCC" data="333"/>
</list>

それをムービークリップという器で作ろうとすれば、

/**
 *
 *  Symbol < MovieClipObjec >のタイムライン
 *
 */


var xm:XML;
var names:Object;
var callback:Object;
function loadData(dataurl) {
	xm = new XML();
	xm.ignoreWhite = true;
	var owner = this;
	xm.onLoad = function() {
		owner.loadComplete(this);
	};
	xm.load(dataurl);
}
function loadComplete(xm) {
	this.names = {};
	var nodes = xm.firstChild.childNodes;
	for (var i = 0; i<nodes.length; i++) {
		var a = nodes[i].attributes;
		this.names[a.name] = a.data;
	}
	this.callback.loadComplete();
}
function getData(name) {
	return names[name];
}
function setCallBack(callbackObj) {
	this.callback = callbackObj;
}
function getNameList() {
	var arr = [];
	for (var p in names) {
		arr.push(p);
	}
	return arr;
}

クラスという器で作ろうとすれば

/**
 *
 *  as ファイル < ClassObject >
 *
 */
class ClassObject {
	private var xm:XML;
	private var names:Object;
	private var callback:Object;
	public function loadData(dataurl) {
		xm = new XML();
		xm.ignoreWhite = true;
		var owner = this;
		xm.onLoad = function() {
			owner.loadComplete(this);
		};
		xm.load(dataurl);
	}
	private function loadComplete(xm) {
		this.names = {};
		var nodes = xm.firstChild.childNodes;
		for (var i = 0; i<nodes.length; i++) {
			var a = nodes[i].attributes;
			this.names[a.name] = a.data;
		}
		this.callback.loadComplete();
	}
	public function getData(name) {
		return names[name];
	}
	public function setCallBack(callbackObj) {
		this.callback = callbackObj;
	}
	public function getNameList() {
		var arr = [];
		for (var p in names) {
			arr.push(p);
		}
		return arr;
	}
}



作り方は変わらないですよね?
またそれらを使う↓ほうもそんなに変わらないですね?

/**
 *
 *  _root等のタイムライン
 *
 */
// 1フレーム目

useClassObject = true;
dataUrl = "member.xml";


if(useClassObject){
	var c = new ClassObject();
}else{
	var c = attachMovie("MovieClipOjbect","c",1);
}

function loadComplete(){
	trace(c.getNameList());
	//this.comboBox.dataProvider = c.getNameList();
}

// 2フレーム目
c.setCallback(this);
c.loadData(dataUrl);


だからクラスという言葉に身構えないで気楽に考えればいいと思います。
引用:
スクリプト関連の本を買ってちょっときちんと勉強しようと思っております。何か今回のようなオブジェクトやクラスの考え方を理解しやすそうなオススメの書籍なんかあれば教えて頂きたいです。

最近flash本は覗いてないのでとんと疎いのですが、私の読んだもので入門書以外のスクリプト系のオブジェクト指向なら
野中さんの執筆物、ムービークリップを利用するオブジェクト指向なら森さんの執筆物などがよかったですね。
あと、σ(^^手前味噌ながらFlashOOPと言う本に参加させていただいてます。


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

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

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