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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     MovieClipを任意のフレームでstopさせるには?
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
flashlite
Åê¹ÆNo.38462
投稿日時: 2008-4-17 5:35
常連
居住地: 東京
投稿: 69
使用環境:
WinXP Win7
Flash CS3,Flash CS5.0

FlashPlayer
FlashLite 1.1、2.0、2.1、3.1(下記)
Docomo SO903i
SH-08A
SoftBank 911T
 922SH
945SHG
au W61SA
S004
Disney DM001SH
Willcom Windows Mobile
 WX341k
MovieClipを任意のフレームでstopさせるには?
ActionScript3で
タイムラインでアニメーションするMovieClipを複数作ってます。

これを任意のフレームからplayするのは
mc.gotoAndPlay(nn);
で出来るのですが

再生させて任意のフレームでstopさせるにはどうすればよいでしょうか?(10フレームだったり、1フレーム目だったり変化します)

MovieClipの1フレーム目にstop();が入っているのと同じような事を
後から設定したいのです。

実際には、たくさんあるボタンのクリックで、それぞれ再生・停止までをさせたいのですが、毎回、全部にEnterFrameを作ってフレーム数を監視して・・Stopという面倒なやり方しか思いつかずに苦労してます。


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

ニノミヤ カズノリ
Åê¹ÆNo.38465
投稿日時: 2008-4-17 11:18
職人
居住地: 東京
投稿: 430
使用環境:
CS4
.4.11, .5.7
XP Pro(sp3)
Flash Player 10,0,22,87,
AIR 1.5.1,
IE 5.5 & 6 & 7 & 8,
Firefox 2.0.0.20 & 3.0.11 & 3.5,
Opera 9.64,
Safari 4,
Google Chrome 2.0.172.31,
Netscape 7.1
Re: MovieClipを任意のフレームでstopさせるには?
引用:
flashliteさんは書きました:
再生させて任意のフレームでstopさせるにはどうすればよいでしょうか?(10フレームだったり、1フレーム目だったり変化します)

MovieClipの1フレーム目にstop();が入っているのと同じような事を
後から設定したいのです。

正攻法ではないでしょうが、楽な方法として、
MovieClip.addFrameScript メソッドを使う手を紹介しておきます。
下記コードで任意のフレームで stop すると思います。
mc.addFrameScript(フレーム数, mc.stop);

ドキュメントに載ってませんので、こちらのリンクを参考にして下さい。
【AS3.0】ドキュメントに載らないメソッド(addFrameScript)
永井勝則
Åê¹ÆNo.38473
投稿日時: 2008-4-17 23:20
職人
居住地: 白馬村
投稿: 796
使用環境:
Windows 7 :Flash CS4:
10.6.8 :Flash CS5.5
Re: MovieClipを任意のフレームでstopさせるには?
地道な方法です。

//PlayMC.as
package {
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.text.TextField;

	public class PlayMC extends MovieClip {
		private var stopFrame:uint;

		public function PlayMC(frameNum:uint) {
			stopFrame=frameNum;
			stop();
		}
		
		private function checkFrameListener(evt:Event):void {
			frame_txt.text=currentFrame.toString();
			x+=Number(currentFrame/6)
			if (currentFrame>=stopFrame) {
				stop();
				removeEventListener(Event.ENTER_FRAME,checkFrameListener);
				trace(name+": STOP");
			}
		}
		
		public function playMC():void {
			addEventListener(Event.ENTER_FRAME,checkFrameListener);
			play();
		}
		
		public function stopMC():void {
			removeEventListener(Event.ENTER_FRAME,checkFrameListener);
			gotoAndStop(1);
			frame_txt.text=currentFrame.toString();
		}
	}
}



//メインのタイムラインのフレーム
var mc1:PlayMC=new PlayMC(50);
mc1.x=50;
mc1.y=50;
mc1.name="mc1";
addChild(mc1);

var mc2:PlayMC=new PlayMC(30);
mc2.x=50;
mc2.y=150;
mc2.name="mc2";
addChild(mc2);


mc1_play_btn.addEventListener(MouseEvent.CLICK,onPlay);
mc1_stop_btn.addEventListener(MouseEvent.CLICK,onStop);
mc2_play_btn.addEventListener(MouseEvent.CLICK,onPlay);
mc2_stop_btn.addEventListener(MouseEvent.CLICK,onStop);

function onPlay(evt:MouseEvent):void {
	var btnName:String=(evt.target.name).slice(0,3);
	this[btnName].playMC();
}

function onStop(evt:MouseEvent):void {
	var btnName:String=(evt.target.name).slice(0,3);
	this[btnName].stopMC();

}


----------------
永井勝則:
himco.jp :

野中文雄
Åê¹ÆNo.38474
投稿日時: 2008-4-18 4:09
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: MovieClipを任意のフレームでstopさせるには?
もうひとつ、地道な方法です。

MovieClipシンボルの[シンボルプロパティ]で、[クラス]または[基本クラス]にStopperクラスを設定します。インスタンスのstopFrameプロパティに止めたいフレーム番号を代入すれば、そのフレームで止まります。ただし、止まったときに、stopFrameプロパティは0にリセットされます。
// ActionScript 3.0クラス定義ファイル: Stopper.as
package {
	import flash.display.MovieClip;
	import flash.events.Event;
	public class Stopper extends MovieClip {
		var _stopFrame:uint = 0;
		public function get stopFrame():uint {
			return _stopFrame;
		}
		public function set stopFrame(nFrame:uint):void {
			_stopFrame = nFrame;
			if (nFrame>0) {
				addEventListener(Event.ENTER_FRAME, stopping);
			}
		}
		private function stopping(eventObject:Event):void {
			if (currentFrame == stopFrame) {
				stopFrame = 0;
				removeEventListener(Event.ENTER_FRAME, stopping);
				stop();
			}
		}
	}
}

引用:
flashliteさんは書きました:
再生させて任意のフレームでstopさせるにはどうすればよいでしょうか?(10フレームだったり、1フレーム目だったり変化します)

MovieClipの1フレーム目にstop();が入っているのと同じような事を
後から設定したいのです。


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

flashlite
Åê¹ÆNo.38494
投稿日時: 2008-4-20 2:26
常連
居住地: 東京
投稿: 69
使用環境:
WinXP Win7
Flash CS3,Flash CS5.0

FlashPlayer
FlashLite 1.1、2.0、2.1、3.1(下記)
Docomo SO903i
SH-08A
SoftBank 911T
 922SH
945SHG
au W61SA
S004
Disney DM001SH
Willcom Windows Mobile
 WX341k
Re: MovieClipを任意のフレームでstopさせるには?
皆様 いろいろな方法をありがとうございます。

それぞれの方法を試してみているところですが
永井勝則さんの地道な方法
をそのまま試したところ

未定義のプロパティ frame_txt へのアクセスです。

というコンパイルエラーが出てしまいました。
勝手にframe_txt:TextFieldを追加してみても同様だったのですが
どうすれば再現できるでしょうか


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

とんび
Åê¹ÆNo.38496
投稿日時: 2008-4-20 3:05
Bak@Fla大巨匠
居住地: 佐賀県 杵島郡
投稿: 275
使用環境:
MX
CS3
:Flash CS6:CS6
.7.5
オーサリングで配置したTextFieldにアクセスしようとするとコンパイルエラー
引用:

flashliteさんは書きました:
未定義のプロパティ frame_txt へのアクセスです。

というコンパイルエラーが出てしまいました。


 これ、私も今悩んでいるところで、オーサリングで配置したTextFieldにドットシンタックスでアクセスしようとすると、コンパイルエラーが出てしまいます。
 無視して動かすと動くんですが、非常に気持ち悪いです。
 とりあえず_txtではなく、this["_txt"]という形でアクセスしていますが、今イチ納得いきません。


----------------
鳶嶋工房

永井勝則
Åê¹ÆNo.38497
投稿日時: 2008-4-20 9:25
職人
居住地: 白馬村
投稿: 796
使用環境:
Windows 7 :Flash CS4:
10.6.8 :Flash CS5.5
Re: MovieClipを任意のフレームでstopさせるには?
操作対象のムービークリップは、その内部にframe_txtという名前のダイナミックテキストフィールドを持っていて、
[リンケージプロパティ]ダイアログボックスで、
[クラス]フィールドにPlayMCクラスを指定しています。
このテキストフィールド自体は、操作対象のムービークリップの再生ヘッドが、今何フレームにあるかを示すだけのものなので、
質問の内容とは直接関係ないです。


----------------
永井勝則:
himco.jp :

flashlite
Åê¹ÆNo.38503
投稿日時: 2008-4-21 2:40
常連
居住地: 東京
投稿: 69
使用環境:
WinXP Win7
Flash CS3,Flash CS5.0

FlashPlayer
FlashLite 1.1、2.0、2.1、3.1(下記)
Docomo SO903i
SH-08A
SoftBank 911T
 922SH
945SHG
au W61SA
S004
Disney DM001SH
Willcom Windows Mobile
 WX341k
Re: MovieClipを任意のフレームでstopさせるには?
ニノミヤ カズノリさん

ありがとうございます。
mc.addFrameScript((フレーム数、もしくはフレームラベル), mc.stop);


リンク先も読みました。

教えていただいた方法がひとつの解決方法として十分機能しました。しかも
stop以外にも、かなり応用が利きそうだと思いました。


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

とんび
Åê¹ÆNo.38743
投稿日時: 2008-5-9 22:22
Bak@Fla大巨匠
居住地: 佐賀県 杵島郡
投稿: 275
使用環境:
MX
CS3
:Flash CS6:CS6
.7.5
Re: オーサリングで配置したTextFieldにアクセスしようとするとコンパイルエラー
 新しくスレッドを作ったほうがいいのかもしれませんが…

 現在以下のようなスクリプトを書いて、エラーを回避しています。

public var frame_txt:TextField = TextField( getChildByName( "frame_txt" ) );


 確かにエラーは出ないのですが、もうちょっといい書き方がありそうな気もします。


----------------
鳶嶋工房

野中文雄
Åê¹ÆNo.38745
投稿日時: 2008-5-9 22:51
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: オーサリングで配置したTextFieldにアクセスしようとするとコンパイルエラー
再現方法が、わからないのですけど。

クラスを定義した場合で、「オーサリングで配置した」ということは、MovieClipシンボルの[クラス]に設定したということですよね。[パブリッシュ設定]における[Flash]タブの[ActionScript 3.0設定]ダイアログで、[ステージのインスタンスを自動宣言]はどうされていますか?
引用:
とんびさんは書きました:
 現在以下のようなスクリプトを書いて、エラーを回避しています。
public var frame_txt:TextField = TextField( getChildByName( "frame_txt" ) );

 確かにエラーは出ないのですが、もうちょっといい書き方がありそうな気もします。


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

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

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