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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     setIntervalがうまく動作しません。
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ニューライス
Åê¹ÆNo.32655
投稿日時: 2007-3-26 23:06
常連
居住地:
投稿: 81
使用環境:
MacOSX(10.4.2)
Flash8
setIntervalがうまく動作しません。
いつもお世話になっています。
newriseです。

サンプルを改造しながら、フォトギャラリーを作成していますが、スライドショーの自動再生ボタンで、自動スライドのON、OFF切り替えがうまくいきません。

サンプル上ではこのボタンはONボタンとOFFボタンを重ねて表示し、mx.behaviors.DepthControl.sendBackwardで前後を切り替える仕組みになっています。
最終的にはこのONとOFFボタンを重ねずに表示したいと考えています。

話がそれましたが、本題です。

ONボタンを連続で、何度もクリックしていくと、スライドする感覚がどんどん短くなってしまいます。
なぜ、スライド感覚が短くなるのかの理解できません。

もう一点、trace(ID)を行うとはじめは、スライドする毎に「1」が返ってきますが、
onボタンをクリックすると、戻り値がどんどん増えていきます。
この戻り値が何を示しているのかも分からず、困っています。

どなたかお分かりになりましたら教えて頂けますか?

尚、スライドショーONOFF切替のボタンは以下のスクリプトを設定しています。


auto_on.onRelease = function() {
ID = setInterval(autoExchange, 5000);
mx.behaviors.DepthControl.sendBackward(this);
};

auto_off.onRelease = function() {
clearInterval(ID);
mx.behaviors.DepthControl.sendBackward(this);
};


空野大二郎
Åê¹ÆNo.32657
投稿日時: 2007-3-27 4:30
職人
居住地: 愛知
投稿: 389
使用環境:
 XP:Home
FlashMX
IE6.0+FlashPlayer7,0,19
CPU:Pentium4 2.26GHz
メモリ:1,024MB
Re: setIntervalがうまく動作しません。
目的とする動作を阻害している根本的な問題は、「auto_on」ボタンを
何回でも押せるようにしているためです。
オリジナルのFlashでは、「auto_on」と「auto_off」は押すたびに
切り替わり、交互にしか押せないようになっています。
ニューライスさんの状態では、「auto_on」が何度でも押せる構造に
原因があります。

対策としては、「auto_on」ボタンと「auto_off」ボタンの大きさを
同じにして同じ位置に配置し、ボタンを押すたびに並び順を変更して
交互にしか押せないようにします。
┌────┐
│auto_on.│
└────┘
  ↑交互に切り替わり、どちらか一方しか
  ↓押せないようにする
┌────┐
│auto_off│
└────┘


とはいえ、ニューライスさんの希望では、上記の対策は使えませんね。
どのみち交互にしかボタンが押せないようにする必要があります。

代替案としては、ボタンを押すごとに自分のボタン機能を停止して、
もう片方のボタン機能を動作させる必要があります。
例えば、Button.enabledプロパティを変更する方法です。
auto_on.onRelease = function () {
	ID = setInterval (autoExchange, 5000);
	//mx.behaviors.DepthControl.sendBackward (this);
	//自分のボタン機能を停止し、もう一方のボタン機能を動作させる
	this.enabled = false;
	this._parent.auto_off.enabled = true;
};
auto_off.onRelease = function () {
	clearInterval (ID);
	//mx.behaviors.DepthControl.sendBackward (this);
	//自分のボタン機能を停止し、もう一方のボタン機能を動作させる
	this.enabled = false;
	this._parent.auto_on.enabled = true;
};

引用:
ニューライスさんは書きました:
サンプル上ではこのボタンはONボタンとOFFボタンを重ねて表示し、mx.behaviors.DepthControl.sendBackwardで前後を切り替える仕組みになっています。
最終的にはこのONとOFFボタンを重ねずに表示したいと考えています。



余談になりますが、変数「ID」が取得しているsetInterval()関数の
戻り値は、『間隔をキャンセルするために clearInterval に
渡すことができる間隔識別子』です。(FlashのHelpより)

setInterval()関数は、実行するたびに新規に定義され、
clearInterval()関数で解除されない限り延々と与えられた命令を
実行します。
つまり、ニューライスさんのスクリプトで「auto_on」ボタンを何度も
押された場合は、自作関数autoExchange()を実行するsetIntervalが
2つも3つも定義されてしまい、一定時間に複数回写真が切り替わって
しまっているわけです。


----------------
空野 大二郎 アニメーター作家
桜の道

ニューライス
Åê¹ÆNo.32690
投稿日時: 2007-3-30 2:58
常連
居住地:
投稿: 81
使用環境:
MacOSX(10.4.2)
Flash8
Re: setIntervalがうまく動作しません。
空野大二郎さん、書き込みありがとうございます!
風邪で、動けなくなってましてレスが遅れました。

もともと作っていたサンプルは同じサイズのボタンを重ねて
前後の重なりを調整していたのですね。
enabledを使い、ボタンの有効無効切り替えができました!
よくflashのサイトなどで、ボタンが無効になったりするのは、この方法を使っているんですね。
これはかなり便利そうですね。

あと、setInterval()関数ですが、
一定時間に複数回写真が切り替わってしまう理由が理解できました。auto_onのクリックごとに、setIntervalが上書きされず、何個も定義できてしまうということは初めて知りました。

尚、IDをtraceしてみると、相変わらず戻り値はON/OFFを切り替えるごとに数値が増していきます。
これは、
引用:
setInterval()関数は、実行するたびに新規に定義され、
clearInterval()関数で解除されない限り延々と与えられた命令を
実行します。

というご説明から推測するに、setInterval()関数が新規に定義するときにその数値(trace(ID)での戻り値)が、毎度割り当てられているという解釈で間違いないでしょうか?

もしそうであれば、IDの値が増えることについても問題ないということで理解できるのですが。
空野大二郎
Åê¹ÆNo.32697
投稿日時: 2007-3-30 14:16
職人
居住地: 愛知
投稿: 389
使用環境:
 XP:Home
FlashMX
IE6.0+FlashPlayer7,0,19
CPU:Pentium4 2.26GHz
メモリ:1,024MB
Re: setIntervalがうまく動作しません。
解決して何よりです。

おおむねニューライスさんの想像通りでしょう。
setInterval()関数の戻り値「間隔識別子」ですが、複数回使われる
ことを前提にしているから、重複の無いように毎度新しい数字が
割り当てられていると、結果から判断できます。

引用:

ニューライスさんは書きました:
尚、IDをtraceしてみると、相変わらず戻り値はON/OFFを切り替えるごとに数値が増していきます。
これは、
引用:
setInterval()関数は、実行するたびに新規に定義され、
clearInterval()関数で解除されない限り延々と与えられた命令を
実行します。

というご説明から推測するに、setInterval()関数が新規に定義するときにその数値(trace(ID)での戻り値)が、毎度割り当てられているという解釈で間違いないでしょうか?

もしそうであれば、IDの値が増えることについても問題ないということで理解できるのですが。


----------------
空野 大二郎 アニメーター作家
桜の道

ニューライス
Åê¹ÆNo.32714
投稿日時: 2007-3-31 10:13
常連
居住地:
投稿: 81
使用環境:
MacOSX(10.4.2)
Flash8
Re: setIntervalがうまく動作しません。
空野大二郎さん、ありがとうございます!

IDの値が増える理由がわかり、すっきりしました!

今後もよろしくお願いします!
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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