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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     ムービークリップ1つで再生停止
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
sasanuma
Åê¹ÆNo.45601
投稿日時: 2010-8-29 14:56
半人前
居住地:
投稿: 42
使用環境:
MacOS10.5,flash(CS4)AS3
ムービークリップ1つで再生停止
質問①
ムービークリップをスタートボタンとストップボタンで再生、停止することはできたのですが、これを一つのボタンでやる場合はそれに適したメソッドはあるのでしょうか?現在は↓のようになっています

mc.stop();
startButton.addEventListener(MouseEvent.CLICK, PlayMovie);

function playMovie(event:MouseEvent):void{
mc.play();
}

stopButton.addEventListener(MouseEvent.CLICK, stopMovie);

function stopMovie(event:MouseEvent):void{
ma.stop();
}


質問②
ムービークリップのタイムラインで、例えばマウスアウトしたら3フレーム目から8フレーム目まで再生して止まる。そして何フレーム目に戻る。というような途中から途中までのフレームの再生命令はできるのでしょうか?現在は↓のようになっていて、いきなり14フレーム目にいってしまいます。gotoAndStopでは指定先で止まってしまいますし、gotoAndPlayでは止める先の指定がわかりません。どなたか教えてください。よろしくお願いします。

home_btn.addEventListener(MouseEvent.MOUSE_OUT, hOut);
function hOut(event:MouseEvent):void{
home_btn.gotoAndStop(home_btn.currentFrame+14);
}
永井勝則
Åê¹ÆNo.45607
投稿日時: 2010-8-30 20:38
職人
居住地: 白馬村
投稿: 796
使用環境:
Windows 7 :Flash CS4:
10.6.8 :Flash CS5.5
Re: 2つ質問です
質問とその答えのスレッドは、後から調べる人が検索しやすいように、1つのテーマ、質問にしぼって行うのが普通です。
したがって次からは、1回の質問は1つにし、具体的な質問の内容をタイトルとして書くようにしてください。

1)
1つのボタンで、ムービークリップのタイムラインの再生を切り替える便利なメソッドはないので、その機能をムービークリップに持たせることになります。
よく使われるのが、Boolean型の変数を使った状態のオン/オフの切り替えです。

これは、階段の上と下にある電灯のスイッチと同じ仕組みです。
2つのスイッチはいつ押しても、点いているときには消え、消えているときには点きます。
スイッチは、
1)電灯が今点いているかどうかという状態を調べ、
2)点いていないなら、点ける
3)点いているなら消す、
という仕組みを持っています。
この、点いているかどうか、を追跡するのが、Boolean型の変数です。

たとえば、下記のisRotate変数は、このクラスのインスタンスが回転しているかどうかを追跡します。
package {

	import flash.display.MovieClip;
	import flash.events.Event;

	public class RotateMC extends MovieClip {

		private var isRotate:Boolean;

		public function RotateMC() {
			isRotate = false;
		}

		public function changeMode():void {
			if (! isRotate) {
				addEventListener(Event.ENTER_FRAME, doRotate);
				isRotate = true;
			} else {
				removeEventListener(Event.ENTER_FRAME, doRotate);
				isRotate = false;
			}
		}

		private function doRotate(evt:Event):void {
			rotation += 2;
		}
	}
}


メインのタイムラインか、ドキュメントクラスからは、RotateMCのchangeMode()を呼び出すだけで、回転しているなら止め、止まっているなら回転させることができます。

2)
MovieClipにはaddFrameScript()という非公開のメソッドがあり、これを使うことができます。

target_mc.stop();
target_mc.addEventListener(MouseEvent.MOUSE_OVER, onOver);

function onOver(evt:MouseEvent):void {
	// trace("mouseover");
	var startFrame:int = 3;
	var endFrame:int = 8;

	target_mc.addFrameScript(endFrame -1, stopPlay);
	target_mc.gotoAndPlay(startFrame);
}

function stopPlay():void {
	// trace("stop");
	target_mc.stop();
}


しかしこれは、いつなくなるか分からない非公式なメソッドなので、使わない方が懸命です。
このような機能を持ったムービークリップのクラスは、次のようなコードで作成できます。
package {

	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;

	public class GotoFrameMC extends MovieClip {

		private var _startFrame:int = 3;
		private var _endFrame:int = 8;

		public function GotoFrameMC() {
			stop();
		}

		private function onOver(evt:MouseEvent):void {
			// trace("mouseover");
			addEventListener(Event.ENTER_FRAME, onLoop);
			gotoAndPlay(_startFrame);
		}

		private function onLoop(evt:Event):void {
			if (currentFrame == _endFrame) {
				stop();
				removeEventListener(Event.ENTER_FRAME, onLoop);
			}
		}

		public function setFlame(startFrame:int=3, endFrame:int = 8):void {
			_startFrame = startFrame;
			_endFrame = endFrame;
			addEventListener(MouseEvent.MOUSE_OVER, onOver);
		}
	}
}


メインのタイムライン
var target_mc:GotoFrameMC = new GotoFrameMC();
target_mc.setFlame(1,5);
target_mc.x = 100;
target_mc.y = 200;
addChild(target_mc);




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

野中文雄
Åê¹ÆNo.45608
投稿日時: 2010-8-30 22:52
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 2つ質問です
フラグの変数を使わないやり方もありますね。
引用:
knagaiさんは書きました:
1)
1つのボタンで、ムービークリップのタイムラインの再生を切り替える便利なメソッドはないので、その機能をムービークリップに持たせることになります。
よく使われるのが、Boolean型の変数を使った状態のオン/オフの切り替えです。


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

sasanuma
Åê¹ÆNo.45609
投稿日時: 2010-8-31 15:43
半人前
居住地:
投稿: 42
使用環境:
MacOS10.5,flash(CS4)AS3
Re: 2つ質問です
永井勝則様 野中文雄様
回答ありがとうございます。次からは1つにしぼって質問します申し訳ありません。
ありがとうございました。

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

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