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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     ステージ全体を、そのまま再開可能な「ストップ状態」にしたい
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
kirarin
Åê¹ÆNo.6110
投稿日時: 2004-4-8 15:38
職人
居住地: 彩の国
投稿: 214
使用環境:
Windows7
IE 8
Flash CS4
Flash Player WIN 10,0,45,2
-------------------------
WindowsXP Professional SP3
IE7.0
Flash 8 Professional
Flash Player 10.0.12.36
-------------------------
Windows2003 Sp1
IE6.0 SP1
Flash MX 2004 ...
ステージ全体を、そのまま再開可能な「ストップ状態」にしたい
またもやkirarinです。m(__)m
表題の件で投稿させてください。

よく「リトライ」など、最初からやりなおすボタンがあると思いますが、そのボタンを押したときに「よろしいですか?」の確認画面を出したいと考えています。

ステージでばゲームが展開しているので、各所でMCが再生されていたり、3種類ほどのタイマー(setInterval)が動いていたりしています。

確認画面を出した時に、その時の状況を止めるだけなら、MCやタイマーを1つづつSTOP掛けていけばかなり大変ですが、まだなんとかなります。
しかし、確認画面で「キャンセル」をしたときには、そのままの状態が再開して欲しいのです。

その確認画面が出ている間だけ、その他全てが一時中断の状態でいてくれるような、そんな夢のようなスクリプトは・・・ないですよね(^^;)

setIntervalでセットしたタイマーが今何秒の状態なのか?を取得するようなメソッドはあるのでしょうか?
また、再生しているMCの数も多いので、1つ1つの再生しているカレントフレームを取得して止めて置くのもかなりキツイ気がしており、もう少し現実的な方法がないか模索中です。


こういうった状況ではみなさんどのように対応されているのでしょうか?
ご意見、アドバイスなどありましたら、ぜひよろしくお願いいたしますm(__)m


<お詫び>
他の投稿にコメントもしたいのですが、なかなか初心者の域から抜け出せず、聞くばかりとなっております。申し訳ありません。
出来るだけ自分でも調べてから投稿はしておりますが、どうしても考えが及ばない故、どうぞよろしくお願い申し上げますm(__)m


----------------
Kirarin

野中文雄
Åê¹ÆNo.6111
投稿日時: 2004-4-8 16:04
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ステージ全体を、そのまま再開可能な「ストップ状態」にしたい
MovieClipについては、一時停止はMovieClip.stop()、再生再開はMovieClip.play()メソッドではダメですか? まとめて処理する方法は、こちらをご覧ください。
引用:
kirarinさんは書きました:
確認画面を出した時に、その時の状況を止めるだけなら、MCやタイマーを1つづつSTOP掛けていけばかなり大変ですが、まだなんとかなります。
しかし、確認画面で「キャンセル」をしたときには、そのままの状態が再開して欲しいのです。
...
また、再生しているMCの数も多いので、1つ1つの再生しているカレントフレームを取得して止めて置くのもかなりキツイ気がしており、もう少し現実的な方法がないか模索中です。


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

ゲスト
Åê¹ÆNo.6113
投稿日時: 2004-4-8 16:46
Re: ステージ全体を、そのまま再開可能な「ストップ状態」にしたい
こんにちは。

それはタイムラインヘッドを止めるだけで良いのでしょうか?それともスクリプト(setIntervalなど)も止めるのですか?
タイムラインだけでしたら既に書かれたようにMovieClip.stop/playで出来ます。setInterval等をまとめて停止するには、可能な設計にするしかないでしょうね。例えば再生/停止フラグを立てておいて、停止なら呼び出される関数内の初めでreturnするとか。
引用:
確認画面を出した時に、その時の状況を止めるだけなら、MCやタイマーを1つづつSTOP掛けていけばかなり大変ですが、まだなんとかなります。
しかし、確認画面で「キャンセル」をしたときには、そのままの状態が再開して欲しいのです。

その確認画面が出ている間だけ、その他全てが一時中断の状態でいてくれるような、そんな夢のようなスクリプトは・・・ないですよね(^^;)

私の場合、経過時間を知るにはDate.getTimeを定期的に実行して、最初の値との差を計るようなことをします。(そのsetIntervalは定期的に呼び出されるのですよね?onEnterFrameみたく。)
引用:
setIntervalでセットしたタイマーが今何秒の状態なのか?を取得するようなメソッドはあるのでしょうか?
また、再生しているMCの数も多いので、1つ1つの再生しているカレントフレームを取得して止めて置くのもかなりキツイ気がしており、もう少し現実的な方法がないか模索中です。
kirarin
Åê¹ÆNo.6114
投稿日時: 2004-4-8 16:53
職人
居住地: 彩の国
投稿: 214
使用環境:
Windows7
IE 8
Flash CS4
Flash Player WIN 10,0,45,2
-------------------------
WindowsXP Professional SP3
IE7.0
Flash 8 Professional
Flash Player 10.0.12.36
-------------------------
Windows2003 Sp1
IE6.0 SP1
Flash MX 2004 ...
Re: ステージ全体を、そのまま再開可能な「ストップ状態」にしたい
野中さん、いつもありがとうございますm(__)m

私も最初それでなんとかなるかと思ったのですが、
例えば
・ステージにMy_MCがある。
・「リトライ」ボタンがあり、押すと「確認画面(conf_btn)」をアタッチ。
・確認画面には「OK(ok_btn)」と「キャンセル(cancel_btn)」がある。
・My_MCは30フレーム目でthis.stop();となっていて31フレーム以降はゲーム終了後に再生するアニメが用意してある。

という状況で、例えば

・リトライボタンにMy_MC.stop();を記述
・確認画面の「キャンセル(cancel_btn)」にMy_MC.play();を記述

とします。
My_MCが30フレーム目で止まっている状況でキャンセル(cancel_btn)を押してしまうと、そのままMy_MC.play();が有効となり、31フレーム以降のアニメが再生されてしまうのです。

またsetIntervalではゲーム時間の計測や、30秒経ったらXXX_MCの位置をずらす、などやっていますが、これも確認画面(conf_btn)を出した前とキャンセル(cancel_btn)を押した後で、そのまま続くような「一時停止」の状態にしようとしています。

ゲームをあらかた作り終えた後で気付いたことなので、もしかしたら根本的に対応できない作り方になってしまっているかもしれませんが、そうであれば次回作るとき(または作り直し時)に参考にしたく思います。


----------------
Kirarin

kirarin
Åê¹ÆNo.6115
投稿日時: 2004-4-8 17:06
職人
居住地: 彩の国
投稿: 214
使用環境:
Windows7
IE 8
Flash CS4
Flash Player WIN 10,0,45,2
-------------------------
WindowsXP Professional SP3
IE7.0
Flash 8 Professional
Flash Player 10.0.12.36
-------------------------
Windows2003 Sp1
IE6.0 SP1
Flash MX 2004 ...
Re: ステージ全体を、そのまま再開可能な「ストップ状態」にしたい
マツダさん、たびたびお世話になっております。m(__)m
丁度入れ違いになってしまいました(書き込みに時間がかかりすぎかなぁ^^;)

>そのsetIntervalは定期的に呼び出されるのですよね
はい、先の投稿にも追加したように、ゲームの時間の測定や、MCの出現や、移動などのきっかけとなっております。
(計3個のタイマーがあります)

>Date.getTimeを定期的に実行して
やはりそうやって自分で確認する作業を行なわなくてはならないのですね。
全体、またはタイマーの一時中断(一時停止)のようなものを期待していましたが、ヘルプにも見付からなかったので、みなさんはどうやってるのかなと思っていました。

例えば10秒ごとにMCが移動する記述がタイマーのfunctionに書いてあったとして、「リトライ」を押したのが4秒の時だったら、例え1分後にキャンセルを押したとしても、6秒後にはMCに移動して欲しいんです。
こんなこと、普通は考えないでしょうか?(^^;)

Date.getTimeで自分で判断してタイマーを通過するかどうか、一度クリアして再度タイマーをセットするか、などなど、自分で制御しなければならなそうですね。

よく考え、前もって想定して作りこまないと。。。。というところでしょうか。


----------------
Kirarin

minor
Åê¹ÆNo.6131
投稿日時: 2004-4-9 11:46
新米
居住地: 大阪
投稿: 19
使用環境:
2kPro or XP & IE6
2004Pro or MX
Re: ステージ全体を、そのまま再開可能な「ストップ状態」にしたい
こんにちは、minorです。

面白そうだったので横槍入れてみます

途中で止めて、再開しても大丈夫なIntervalを考えてみました。
どっちにしろ、改修は必要だと思うので^^;

time1 = 10			//アクション1の実行間隔(sec)
time2 = 5			//アクション2の実行間隔(sec)
count = 0			//Intervalのカウンタ

function timer ( path ) {
	path.count++
	trace("count = " + path.count )
	if ( ( path.count % path.time1 ) == 0 ) {
		trace("アクション1実行")
	}
	if ( ( path.count % path.time2 ) == 0 ) {
		trace("アクション2実行")
	}
}

ID = setInterval( timer , 1000 , this )

こんな感じでIntervalを1秒ごとカウントしておき、
あらかじめ決めておいたタイミングで実行すると。
当然Intervalを停止しても、カウントの変数はリセットせずに
置いておきましょう。

この方法の弱点が・・・
・一秒ごとにInteval実行するのでちょっぴり負荷が大きくなる。
・最大で1秒弱の誤差が発生する可能性がある。
といったところでしょうか?

Intervalを複数設定されているのであれば、この方法で1つにまとめると
良いんじゃないかな?と思います。

比較的少ない改修で済むかと思いますが・・・いかがでしょうか?

>他の皆様
突っ込みあれば宜しくお願い致します
野中文雄
Åê¹ÆNo.6133
投稿日時: 2004-4-9 12:12
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ステージ全体を、そのまま再開可能な「ストップ状態」にしたい
単純にMovieClip.stop()MovieClip.play()を呼出せば、当然そのような動作になりますね。
引用:
kirarinさんは書きました:
・My_MCは30フレーム目でthis.stop();となっていて31フレーム以降はゲーム終了後に再生するアニメが用意してある。

という状況で、例えば

・リトライボタンにMy_MC.stop();を記述
・確認画面の「キャンセル(cancel_btn)」にMy_MC.play();を記述

とします。
My_MCが30フレーム目で止まっている状況でキャンセル(cancel_btn)を押してしまうと、そのままMy_MC.play();が有効となり、31フレーム以降のアニメが再生されてしまうのです。

各MovieClipインスタンスの状態を正しくコントロールするには、そのための関数を用意する必要があるでしょう。一時停止にはxPause()、再生の再開はxResume()を呼出します。MovieClipインスタンスに対してxStop()を実行してあれば、xPause()やxResume()に反応しなくなります(つねに停止)。
// MovieClip: コントロール対象のインスタンス
// 第1フレームアクション
// またはonClipEvent (load)ハンドラ内に定義
this.bPause = false;
this.xStop();  // 初期状態が停止の場合
function xPlay() {
	this.bPlay = true;
	this.play();
}
function xStop() {
	this.bPlay = false;
	this.stop();
}
function xPause() {
	if (bPlay) {
		this.bPlay = false;
		this.bPause = true;
		this.stop();
	}
}
function xResume() {
	if (this.bPause) {
		this.bPlay = true;
		this.bPause = false;
		this.play();
	}
}


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

kirarin
Åê¹ÆNo.6135
投稿日時: 2004-4-9 12:40
職人
居住地: 彩の国
投稿: 214
使用環境:
Windows7
IE 8
Flash CS4
Flash Player WIN 10,0,45,2
-------------------------
WindowsXP Professional SP3
IE7.0
Flash 8 Professional
Flash Player 10.0.12.36
-------------------------
Windows2003 Sp1
IE6.0 SP1
Flash MX 2004 ...
Re: ステージ全体を、そのまま再開可能な「ストップ状態」にしたい
minorさん、野中さん、詳しいスクリプト付きでの解説、本当にありがとうございますm(__)m
タイマーの制御、MCの制御、二つとも対策方法が提示され、少し希望が出てきました。

まずは頂いたスクリプトを自分なりに理解し、それから改修作業に取り掛かかりたいと思います。
ただ、この投稿以前に別スレッドでお話ししましたが、このゲーム、負荷が高いようで(^^;)改修するにもできるだけ軽くしていかなければならない状況です。
なので1秒後とのタイマー監視が実際に取り入れられるかわかりませんが、ひとまず状況を変えるためにも試してみます。

ちょっと改修規模が大きく、作業時間がかかりそうですが、結果は後日ご報告に参りたいと思います。
ありがとうございましたm(__)m


----------------
Kirarin

加藤達雄
Åê¹ÆNo.6139
投稿日時: 2004-4-9 14:26
新米
居住地: 東京
投稿: 24
使用環境:
Win XP Pro
MX Pro 2004
Re: ステージ全体を、そのまま再開可能な「ストップ状態」にしたい
ムービークリップのポーズ/再開は、以前に書いたものがあった
ので、少し手直ししてアップしてみました。

http://tatsuokato.com/sample/mcPause.zip

MovieClip.prototype.stopとMovieClip.prototype.playを
オーバーライドしています。

また、ポーズ/再開付きのストップウォッチも書いてみました。

http://tatsuokato.com/sample/StopWatch.zip

ご参考まで。
kirarin
Åê¹ÆNo.6142
投稿日時: 2004-4-9 16:33
職人
居住地: 彩の国
投稿: 214
使用環境:
Windows7
IE 8
Flash CS4
Flash Player WIN 10,0,45,2
-------------------------
WindowsXP Professional SP3
IE7.0
Flash 8 Professional
Flash Player 10.0.12.36
-------------------------
Windows2003 Sp1
IE6.0 SP1
Flash MX 2004 ...
Re: ステージ全体を、そのまま再開可能な「ストップ状態」にしたい
加藤さん、レスありがとうございます。
人の書いたスクリプトをこうやってFLASHごと見る機会がないので、いろんな意味でも勉強になります。
早速ダウンロードさせて頂きました。
頂いたサンプルもあわせて理解していこうと思います。
本当にありがとうございました(*^∇^*)

ただいま格闘中です(^^;)が、少しづつでも自分のものにしていけたらと思っています。

ひとまずお礼まで・・・m(__)m


----------------
Kirarin

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

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