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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     スライダーの制御について
投稿するにはまず登録を

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
kNaoko
Åê¹ÆNo.4660
投稿日時: 2004-3-7 21:23
新米
居住地:
投稿: 12
使用環境:
win2000
Flash 5
Flash MX
Re: スライダーの制御について
ありがとうございます。
ボタンにpointer_mcの変数rateの値を直接変更するように書くと動きました!
引用:

Buttonから操作するなら、pointer_mcの変数rateの値を直接変更すべきでしょう。

load_mcに
onClipEvent (data) {
if (this.getBytesTotal()>0 && this.getBytesLoaded()>=this.getBytesTotal()) {
totalFrame = this._totalframes;
_root.slider_mc.pointer_mc.rate = totalFrame/_root.slider_mc._width;
this.gotoAndPlay(1);
} else {
this.stop();
}
}
と書くと動きました!
とても参考になりました。
引用:

つぎの段階の方法としては、_root.load_mcのMovieClipアクションで外部SWFのロード待ちをしたうえで、読込み後の_totalframesを使って変数pointer_mc.rateの変更をすることが考えられます。やる気とお時間があったら、挑戦してみてください。

お休みの中、返信していただきありがとうございました!
野中文雄
Åê¹ÆNo.4649
投稿日時: 2004-3-7 16:56
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: スライダーの制御について
Buttonから操作するなら、pointer_mcの変数rateの値を直接変更すべきでしょう。
引用:
kNaokoさんは書きました:
目次ステージ上の1フレーム目に、左の目次項目ボタンに対するスクリプトを
//ボタン1
btn01.onRelease = function(){
	load_mc.loadMovie("u01_n01.swf");
	mcRate = 285;
}

rateは、pointer_mcの変数です。Buttonから値を変更する際には、ターゲットパスにご注意ください。
引用:
下のスライダーは、slider_mc→pointer_mcに
onClipEvent (load) {
	nWidth = _parent._width;
	rate = _root.mcRate/nWidth;
}

どこをどう直していいのかがわからずいきずまっているのですが、もう少しでできそうな気がするのでこのナビゲーションの方法を諦めきれずにいます。

つぎの段階の方法としては、_root.load_mcのMovieClipアクションで外部SWFのロード待ちをしたうえで、読込み後の_totalframesを使って変数pointer_mc.rateの変更をすることが考えられます。やる気とお時間があったら、挑戦してみてください。


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

kNaoko
Åê¹ÆNo.4647
投稿日時: 2004-3-7 16:27
新米
居住地:
投稿: 12
使用環境:
win2000
Flash 5
Flash MX
Re: スライダーの制御について
現在の構造は、目次ステージ上に
左に「1.」「2.」・・・と縦に並んだ目次項目ボタンがあり、
右に、目次項目ボタンをクリックすると、項目ごとのアニメーションが流れるload_mcというloadMovieするためのmcが配置しています。
下にそのload_mcのアニメーションを制御するための「再生ボタン」「停止ボタン」「スライダー」を配置しています。

目次ステージ上の1フレーム目に、左の目次項目ボタンに対するスクリプトを
//ボタン1
btn01.onRelease = function(){
load_mc.loadMovie("u01_n01.swf");
mcRate = 285;
}
//ボタン2
btn02.onRelease = function(){
load_mc.loadMovie("u01_n02.swf");
mcRate = 600;
}
と、1つずつ指定しています。

下のスライダーは、slider_mc→pointer_mcに
onClipEvent (load) {
nWidth = _parent._width;
rate = _root.mcRate/nWidth;
}
on (press) {
this.startDrag(true, 0, -1, nWidth, -1);
this.bDrag = true;
}
on (release, releaseOutside) {
this.stopDrag();
_root.load_mc.play();
this.bDrag = false;
}
onClipEvent (enterFrame) {
if (bDrag) {
_root.load_mc.gotoAndStop(Math.floor(this._x*rate));
} else {
this._x = _root.load_mc._currentframe/rate;
}
}
と記述しました。

でも、野中様がいうように、
pointer_mcのonClipEvent (load) は、画面がロードされた時の一度だけ実行するのか、これではボタンクリックし、mcRateには、それぞれの数値が入りますが、pointer_mcは認識してくれていないようです。
rate = _root.mcRate/nWidth;
の_root.mcRateに「284」など直接数値を入力すると正常に動作しました。
構造は、これで理解していただけますでしょうか?
どこをどう直していいのかがわからずいきずまっているのですが、もう少しでできそうな気がするのでこのナビゲーションの方法を諦めきれずにいます。
どうぞよろしくお願いいたします。
野中文雄
Åê¹ÆNo.4635
投稿日時: 2004-3-7 13:45
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: スライダーの制御について
onClipEvent (load)ハンドラは、そのMovieClipインスタンスがフレームに登場したときに1度だけ呼出されます。そのとき_root.load_mcの_totalframesが「認識されます」。外部SWFファイルがロードされていなければ、これからどれを読込むつもりであるかは、現在の科学では予測できないということです。
引用:
kNaokoさんは書きました:
slider_mcの中のpointer_mcに
nWidth = _parent._width;
rate = _root.load_mc._totalframes/nWidth;
と指定していますが、これでは読み込まれたswfファイルのtotalframesを認識しないということですよね?

「もとファイル」というのは、外部SWFですか? それとも、読込む側のムービーですか。

前者なら、SWF内に設定された変数も、ファイルをロードしなければ調べられません。ロードが終わっていれば、_totalframesを取得することも可能になります。ですから、問題状況は変わりません。

後者ですと、ロード時に、予め設定しておいたSWFのフレーム総数を更新するということですね。それは、取り得る方法のひとつだと思います。
引用:
読み込まれたswfファイルによってスライダーの稼動範囲も異なって
くるのですが、それをもとファイルに記述しておかないといけないと
いうことでしょうか?

そうすると、読込んだSWFの2フレームめで、スライダの可動範囲の倍の位置に飛んでしまうはずです。
引用:
元ステージのtotalframesは1で、load_mcに読み込まれるtotalframeは、読み込まれるswfファイルによって違います。200?10000くらいです。

どのような方法を想定されたうえで、「よい方法」をお尋ねになっているのでしょうか?やり方は、いろいろ考えられます。汎用性、簡単さ、理解のしやすさなど、「よい方法」の基準自体もさまざまです。

理解のしやすさでいえば、現状kNaokoさんが考えられた方法をもとに、修正・応用を加えた方がよいでしょう。ですから、その情報をお伝えいただく必要があります。

簡単さなら、変数rateを使わないことです。onClipEvent (enterFrame)ハンドラの中で直接_root.load_mc._totalframes/nWidthを計算すればよいと思います。ただ、外部SWFロードの瞬間に、_totalframesの値が0になることがあるかもしれません。
引用:
こういった場合どこにどのように指定するのがよい方法なのか
わかりません。勉強不足で申し訳ないのですが教えていただけないでしょうか。


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

kNaoko
Åê¹ÆNo.4630
投稿日時: 2004-3-7 11:04
新米
居住地:
投稿: 12
使用環境:
win2000
Flash 5
Flash MX
Re: スライダーの制御について
ありがとうございます。
元のステージを目次のようにし、それぞれの項目をクリックすると、
load_mcにそれぞれのswfファイルを読み込みその制御を元のステージで行おうと考えています。
引用:

複数のインスタンスが関係するムービーでは、その構造(パスやシンボルの内容)の情報も必要です。

loadMovie()のターゲットは、おそらく_root.load_mcですね。slider_mcの_parentには、スライダーの可動範囲を決める形状が描かれていると推測します。


loadMovieのターゲットは、_root.load_mcです。
slider_mcの中のpointer_mcに
nWidth = _parent._width;
rate = _root.load_mc._totalframes/nWidth;
と指定していますが、これでは読み込まれたswfファイルのtotalframesを認識しないということですよね?
読み込まれたswfファイルによってスライダーの稼動範囲も異なって
くるのですが、それをもとファイルに記述しておかないといけないと
いうことでしょうか?

引用:

loadMovie()実行前と後の_root.load_mcの_totalframesは、それぞれいくつですか? ロードしたSWFのフレーム数の方が大きければ、可動範囲を越えてしまうと思いますが。

元ステージのtotalframesは1で、load_mcに読み込まれるtotalframeは、読み込まれるswfファイルによって違います。200?10000くらいです。
元ステージのtotalframeを1000にし、
rate = _root.load_mc._totalframes/nWidth;
ここに直接1つめの読み込みswfファイルのtotalframe数を
rate = 285/nWidth;
と入力すると動きました。
が、読み込まれるswfファイルによってこの値は変わってきます。
こういった場合どこにどのように指定するのがよい方法なのか
わかりません。勉強不足で申し訳ないのですが教えていただけないでしょうか。
よろしくお願いいたします。
野中文雄
Åê¹ÆNo.4628
投稿日時: 2004-3-7 6:17
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: スライダーの制御について
複数のインスタンスが関係するムービーでは、その構造(パスやシンボルの内容)の情報も必要です。

loadMovie()のターゲットは、おそらく_root.load_mcですね。slider_mcの_parentには、スライダーの可動範囲を決める形状が描かれていると推測します。

loadMovie()実行前と後の_root.load_mcの_totalframesは、それぞれいくつですか? ロードしたSWFのフレーム数の方が大きければ、可動範囲を越えてしまうと思いますが。
引用:
kNaokoさんは書きました:
loadMovieを使ってステージにswfファイルを読み込んで、
...
slider_mcに
onClipEvent (load) {
	this.nWidth = _parent._width;
	this.rate = _root.load_mc._totalframes/this.nWidth;
}
// [中略]
onClipEvent (enterFrame) {
	if (bDrag) {
		_root.load_mc.gotoAndStop(Math.floor(this._x*this.rate));
	} else {
		this._x = _root.load_mc._currentframe/this.rate;
	}
}

と書いたのですが、load_mcが再生されるとポインターがどこかに
消えてしまいます。


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

kNaoko
Åê¹ÆNo.4623
投稿日時: 2004-3-7 0:45
新米
居住地:
投稿: 12
使用環境:
win2000
Flash 5
Flash MX
スライダーの制御について
loadMovieを使ってステージにswfファイルを読み込んで、
読み込んだアニメーションの制御をステージに配置したいのですが。
スタートボタン、ストップボタンは
load_mc.play();
load_mc.stop();
で動作しましたが、スタイダーが動作しません。
slider_mcに
onClipEvent (load) {
this.nWidth = _parent._width;
this.rate = _root.load_mc._totalframes/this.nWidth;
}
on (press) {
this.startDrag(true, 0, -1, this.nWidth, -1);
this.bDrag = true;
}
on (release, releaseOutside) {
this.stopDrag();
_root.load_mc.play();
this.bDrag = false;
}
onClipEvent (enterFrame) {
if (bDrag) {
_root.load_mc.gotoAndStop(Math.floor(this._x*this.rate));
} else {
this._x = _root.load_mc._currentframe/this.rate;
}
}
と書いたのですが、load_mcが再生されるとポインターがどこかに
消えてしまいます。
どうぞ、ご教授の程よろしくお願いします。

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

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