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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     ムービーの一定時間停止
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
queein
Åê¹ÆNo.6945
投稿日時: 2004-5-7 1:16
新米
居住地: 田舎
投稿: 3
使用環境:
OS: Windows98SE
現FLASH: FLASH5(泣 
        →FLASHMX(期待
ムービーの一定時間停止
初めまして。
最近FLASHを始め、今日に至り壁にぶつかりました。
ムービーにおいて、イメージの移動中にある位置で一定時間停止させようと思ったのですが、普通にできません;
Scriptを使う事は分かったのですが、無知な私にはサッパリでした;
無知なりに色々調べたり過去ログを読んだのですが、それでも都合よくいきません。。
ddoyrさんの"フラッシュを一時停止させる"という投稿を参考にしたのですが、
ある位置で止まる事は止まるのですが制御で再生しないと再び動く事がありません。。
これが例のrakeemさんとマツダショウさんのScriptの参考です。

stop();
stopID = setInterval(stopFRAME,3000);
function stopFRAME() {
clearInterval(stopID);
play();
}

ふと思ったのですがバージョンが古い事が原因なのかもしれません・・・
言葉不足の面々が御座いますが、どうかこんな私にご教授お願い致しますm(__)m
野中文雄
Åê¹ÆNo.6947
投稿日時: 2004-5-7 1:47
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ムービーの一定時間停止
第三者から見てわかるようにご説明ください。

「イメージ」というのは、ビットマップですか、シェイプですか、シンボルのインスタンスですか? シンボルのインスタンスの場合、タイプはムービークリップですか、グラフィックですか?

「移動」は、モーショントゥイーンで行っているのですか? それとも、スクリプトによる制御ですか。「ある位置」というのは、特定のフレーム(モーショントゥイーンの場合)あるいは座標(スクリプトでの制御の場合)ですか? それとも、ユーザーが(ボタンなどを)クリックしたときというような、任意の位置ですか?

「普通に」できないというのは、「普通でない方法」ならできるということですか? それはどんな方法ですか?
引用:
smoqueeinさんは書きました:
ムービーにおいて、イメージの移動中にある位置で一定時間停止させようと思ったのですが、普通にできません;

サッパリ」は、ご説明になりません。
引用:
Scriptを使う事は分かったのですが、無知な私にはサッパリでした;

バージョンが古い事が原因」です。
引用:
stop();
stopID = setInterval(stopFRAME,3000);
// [後略]

ふと思ったのですがバージョンが古い事が原因なのかもしれません・・・


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

salvox
Åê¹ÆNo.6954
投稿日時: 2004-5-7 5:09
常連
居住地: 東京都
投稿: 73
使用環境:
Windows2000
FlashMX
テキストエディター:EmEditor
バージョンが古い上に、引数も・・・
確かに、バージョンが古いのがもっともな原因ですが、
それと setIntervalの引数もあまりお勧めできないものです。
確かに、それでも動きます。構文は間違ってはないのですが、
JavaScriptのsetIntervalもそうですが、かなり癖がヒドイです。
なんで、動作が期待・信用できる引数の指定のしかたの方が、後々手間がはぶけますよ。
特に、setIntervalは文字列で関数を指定するので、関数がグローバルな場合と、ローカルな場合とで
重なってる場合があるので、回す関数のターゲットを指定した方が、よりベターです。

例えば
<pre>
/*********************************************************************

スレッド型 ウエイト関数

*********************************************************************/


//----------------------------------------------------------------
// 設定値:使用する場合は、ここをだけを書き換える
//----------------------------------------------------------------
this.wait_sec = 10; // ←待たせる時間を秒で指定 例:10秒


//---------------------------------------------------------------
// 使用変数初期化
//---------------------------------------------------------------
this.startTime = getTimer(); // カウント開始時間の取得
this.passTime = 0; // 過ぎた時間を格納する変数


//---------------------------------------------------------------
// ウエイト処理関数
//---------------------------------------------------------------
this.funcWait = function( )
{
// 現在までに過ぎた秒数を入れる変数 初期化
// なくても良い。分かりやすいように。
var count_sec = 0;

// 過ぎた時間の取得
this.passTime = getTimer();

// 現在までに過ぎた時間を検出
// getTimer()は、1/1000秒で返すので、
// 1秒,2秒といった整数値が欲しい
count_sec = this.passTime - this.startTime; // この二行は関数にしても良い
count_sec = Math.round( count_sec / 1000 ); //← 秒の取得

// ウエイト判定
// 過ぎた時間が、設定した時間を超えていれば、
// スレッドを止め、再生
if( count_sec > this.wait_sec )
{
this.play();
clearInterval( this.timerID );
}

// else文はなるべく使わない。無い方が高速
// 上のif文でfalse ならここへ
this.stop();

// 野中さんは↓の使い方嫌いのようだけど
updateAfterEvent();
return;
}


//--------------------------------------------------------------
// スレッドの開始
//--------------------------------------------------------------
this.stop();
this.timerID = setInterval( this, "funcWait", Math.round( 1000/62 ) );
</pre>

上記のように、ウエイト関数を定義したターゲットパスを指定してやれば
『その関数!!』と指名してるようなもんなので、確実で、後から見て
分かりやすい。

呼び出す関数はなるべく文字列を使う。JavaScript互換

スレッド時間は、フレームレートが31だった場合は、約2倍の62で設定
これは、あまりスレッド更新時間を早くしても、スペックに左右される為
このぐらいが限界値なので。..で、なるべく整数値


信頼性と確実性が増したように思いませんか?
時間がなくなったので、次はVer.5用のonClipEventでのウエイト関数を書きます。


----------------
(C)SalvoxStudioStation

queein
Åê¹ÆNo.6958
投稿日時: 2004-5-7 6:25
新米
居住地: 田舎
投稿: 3
使用環境:
OS: Windows98SE
現FLASH: FLASH5(泣 
        →FLASHMX(期待
Re: ムービーの一定時間停止
野中大先生大変失礼しました!
ホントに説明不足で申し訳御座いません´´
flashを始めたのはホントにこの2・3日なので専門用語やscriptなどといった事も申し訳無いほど分かっていませんし、私自身まだ青い人間でして´´flashなんてまだ早すぎたかな(大汗)――弁解
ほんの軽い気持ちで投稿したつもりでしたが、逆に失礼な事をしました。もう少し勉強して粗相の無いように気をつけたいと思います。
さて、
"イメージ"というのはインスタンスでグラフィックだと思 い ま す。
"移動"はモーショントゥイーンで
"ある位置"というのは特定のフレームの事です。
"普通にできない"・・・これはつまり今までのように効果など手早い方法でスムーズにできなかったという事です。日本語に誤りがありました。申し訳御座いません。
"サッパリ"は確かに説明になってません。許してください。
"バージョンが古い"といわれてしまうと・・・
やっぱり今のバージョンだとフレームを増やすしかないんでしょうか。。
やりたい事を言いますと
flash内で作られた文章が消えて現れてしばらくしてから消える という動きをつけたかったのです。
一時停止は簡単にできるかと思いきや、スムーズにはいかないようですね;しかもバージョンが古いときたらどーしようもないですね;
何か方法は無いものでしょうか・・・ よければご教授お願いします。

salvoxさん偉く分かり易いご説明有難う御座います。
かなり御手数掛けた事かと思います。大変申し訳無い気持ちで一杯です。 まだflashに手を掛けていませんが、自分なりにやってみようと思います。それとまずバージョンアップとScriptといった事の勉強に励まないとですよね^^;
野中文雄
Åê¹ÆNo.6961
投稿日時: 2004-5-7 9:25
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ムービーの一定時間停止
スクリプトを使用しない方法としては、「フレームを増やすしかない」でしょう。
引用:
smoqueeinさんは書きました:
"イメージ"というのはインスタンスでグラフィックだと思 い ま す。
"移動"はモーショントゥイーンで
"ある位置"というのは特定のフレームの事です。
...
やっぱり今のバージョンだとフレームを増やすしかないんでしょうか。。

スクリプトを使えば、Flash 5でも結論としては可能です。方法は、いろいろ考えられます。

ただ、smoqueeinさんが、スクリプトについてどの程度知識をお持ちなのかわかりません。「オムレツの作り方」を質問されたとしても、相手によってお答えは違ってきます。オムレツは、洋食の料理人を目指す学生さんの卒業試験に出ることさえあるそうです。卵の割り方もわからない人に対する説明とは、当然内容が変わってきます。「初心者」という表現は、ご説明になりません(料理学校の学生さんだって、料理人としては初心者です)。

ターゲットパスを理解され、MovieClip.stop()メソッドをお使いになれれば、一番簡単なのはMovieClipインスタンスからタイムラインをコントロールすることでしょう。
引用:
flash内で作られた文章が消えて現れてしばらくしてから消える という動きをつけたかったのです。
...
何か方法は無いものでしょうか・・・ よければご教授お願いします。


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

queein
Åê¹ÆNo.7010
投稿日時: 2004-5-7 23:02
新米
居住地: 田舎
投稿: 3
使用環境:
OS: Windows98SE
現FLASH: FLASH5(泣 
        →FLASHMX(期待
Re: ムービーの一定時間停止
ご丁寧な返信、野中先生、salvoxさん、大変有難う御座います。
今回の件ですが、野中先生の
MovieClipインスタンスからタイムラインをコントロールする事で無事解決できましたv
少し理解力の少ない私としてはこちらの方が分かり易かったようです。
salvoxさんせっかくなのに申し訳ありません
習うより慣れろ的な感じで始めたflash、甘く見てました
もっと参考書やフォーラム過去ログと言ったものを参考に勉強して今度はそちら側の立場として役に立てるようになればいいなと思ってます。
本当にご迷惑と御手数をおかけしました。
有難う御座いました。
youich
Åê¹ÆNo.7017
投稿日時: 2004-5-8 3:30
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: バージョンが古い上に、引数も・・・
すこし解らないところがあるので質問させてください。
引用:

salvoxさんは書きました:
確かに、バージョンが古いのがもっともな原因ですが、
それと setIntervalの引数もあまりお勧めできないものです。
確かに、それでも動きます。構文は間違ってはないのですが、
JavaScriptのsetIntervalもそうですが、かなり癖がヒドイです。

私が思いますところではqueeinさんが紹介されているスクリプトは
簡単にフレームを止めるスクリプトとして良いと思うのですけど、
癖がヒドイというのは具体的にどういうところでしょうか?
引用:

特に、setIntervalは文字列で関数を指定するので、関数がグローバルな場合と、ローカルな場合とで
重なってる場合があるので、回す関数のターゲットを指定した方が、よりベターです。

setIntervalの引数になる関数を文字列で指定する時は関数のターゲット(オブジェクト)
を指定するのは必須なんじゃないでしょうか?
salvoxさんがおっしゃってる関数がグローバル、ローカルというのが
どういうことを指してるのかもちょっと解りませんです。
引用:

// ウエイト判定
// 過ぎた時間が、設定した時間を超えていれば、
// スレッドを止め、再生
if( count_sec > this.wait_sec )
{
this.play();
clearInterval( this.timerID );
}

// else文はなるべく使わない。無い方が高速
// 上のif文でfalse ならここへ
this.stop();

所定時間が経過してplayが実行されclearIntervalの後で、
今一度this.stopが実行されるので動き始めないように思うのですが、
σ(^^がなにか勘違いをしていますでしょうか?
引用:

// 野中さんは↓の使い方嫌いのようだけど
updateAfterEvent();
return;
}


ここはよく意味が解りませんが、stopをかけている間だから
再描画(updateAfterEvent)の必要はない、
またはfuncWaitの目的は単に時間の経過をはかっているだけなので、
intervalごとの(updateAfterEvernt)再描画の必要はないのでは、ということなら私もそう思います。

長々と質問して、失礼なところがありましたら申し訳ありません。


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

野中文雄
Åê¹ÆNo.7021
投稿日時: 2004-5-8 5:31
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: バージョンが古い上に、引数も・・・
一応、ここだけ反応しておきます。

このスクリプトの場合には、setInterval()のコールバック関数でアニメーション処理はしていない(と思う)ので、私も必要はないと考えます。
引用:
salvoxさんは書きました:
        // 野中さんは↓の使い方嫌いのようだけど
        updateAfterEvent();
        return;
    }

引用:
youichさんは書きました:
ここはよく意味が解りませんが、stopをかけている間だから
再描画(updateAfterEvent)の必要はない、
またはfuncWaitの目的は単に時間の経過をはかっているだけなので、
intervalごとの(updateAfterEvernt)再描画の必要はないのでは、ということなら私もそう思います。

updateAfterEvent()一掃キャンペーン」のことをいわれているのでしたら、おもなキャンペーン対象はenterFrmae(onClipEvent (enterFrame)またはMovieClip.onEnterFrameハンドラ)における呼出しです。

理由は、動作しないからです。使われる方は、よく「おまじない」にと表現されます。しかし、動作しないスクリプトは、何のまじないにもなりません。コードの最後に必ずbeHappy()と入れるのと同じ行動です(もちろんこの関数呼出しは通常無意味です)。

setInterval()のコールバック関数でアニメーションを行う場合に、updateAfterEvent()関数を呼出すのはキャンペーン対象外です。ただ、通常のフレーム描画(enterFrame)に追加して画面の更新を行うので、その負荷を考えたうえで安易な使用はさけましょうというだけです。


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

ゲスト
Åê¹ÆNo.7024
投稿日時: 2004-5-8 7:18
Re: バージョンが古い上に、引数も・・・
こんにちは。

タイムライン実行と同一のシステムタイマーを使うので、ミリ秒までの正確さは保証出来ない、と言うことでしょう。
引用:
youichさんは書きました:
引用:
salvoxさんは書きました:
確かに、バージョンが古いのがもっともな原因ですが、
それと setIntervalの引数もあまりお勧めできないものです。
確かに、それでも動きます。構文は間違ってはないのですが、
JavaScriptのsetIntervalもそうですが、かなり癖がヒドイです。

私が思いますところではqueeinさんが紹介されているスクリプトは
簡単にフレームを止めるスクリプトとして良いと思うのですけど、
癖がヒドイというのは具体的にどういうところでしょうか?

私も同意見です。それだとplay実行後にstopが実行されてしまいます。
引用:
youichさんは書きました:
引用:
// ウエイト判定
// 過ぎた時間が、設定した時間を超えていれば、
// スレッドを止め、再生
if( count_sec > this.wait_sec )
{
this.play();
clearInterval( this.timerID );
[color=#000088]return; //追加[/color]
}

// else文はなるべく使わない。無い方が高速
// 上のif文でfalse ならここへ
this.stop();

所定時間が経過してplayが実行されclearIntervalの後で、
今一度this.stopが実行されるので動き始めないように思うのですが、
σ(^^がなにか勘違いをしていますでしょうか?
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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