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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     swapDepthsを使った時のマスクとの関係について
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
hidenoki
Åê¹ÆNo.3674
投稿日時: 2004-2-10 18:28
新米
居住地: 群馬県
投稿: 15
使用環境:
Windows2000
FlashMX-Version6.0
swapDepthsを使った時のマスクとの関係について
こんにちは、宜しくお願い致します。

サンプルの様な枠内に5つのMCが流れるムービーを作っています。
サンプル
レイヤー構成は、上から順に
1)TimeLine → 変数 Move = 1 を設定してあります。
2)Frame → 枠画像があります。
3)Mask → 表示領域の設定
4)Movie → 5つのMCがあります。
となっています。
流れている5つのMCには、下記のスクリプトを個々に設定してあります。
onClipEvent (enterFrame) {
	if (_root.Move == 1) {
		this._x += 4; // 右に流れる
	}
	this.onRollOver = function() {
		this._xscale = 150; // 1.5倍表示
		this._yscale = 150;
		this.swapDepths( 6 ); //←青色MCのみ
		_root.Move = 2;
	}
	this.onRollOut = function() {
		this._xscale = 100; // 元に戻す
		this._yscale = 100;
		this.swapDepths( 0 ); //←青色MCのみ
		_root.Move = 1;
	}
	if (this._x > 300) {
		this._x -= 300; // 枠外に出たら左へ
	}
}

それで、青色MCにだけswapDepthsを使用しているのですが、青色MCをロールオーバーするとマスクを飛び出て表示されてしまいます。ロールアウトしても、マスクを飛び出したまま…なぜなんでしょうか(?-?)
swapDepthsを使用するとレイヤー順序が無視されるのでしょうか?

swapDepthsを使用している理由は、青色MC以外をロールオーバーさせると気付かれるかと思いますが、左または右のMCがロールオーバーさせたMCより重ね順が上である事があるので、それをどうにかしたいと思いswapDepthsを使用した次第です。

宜しくお願い致します。m(__)m
笠居トシヒロ
Åê¹ÆNo.3676
投稿日時: 2004-2-10 19:13
マスター
居住地: 兵庫
投稿: 870
使用環境:
SnowLeopard, Safari4, CS4
Windows7, IE8, CS4
Re: swapDepthsを使った時のマスクとの関係について
それぞれのムービークリップの深度を、getDepthで調べてみれば、原因がわかると思いますよん。


----------------
笠居 マッドシー
http://www.mad-c.com/

Åê¹ÆNo.3677
投稿日時: 2004-2-10 19:16
半人前
居住地: 英国
投稿: 39
使用環境:
Flash MX 2004 @ Windows XP
Re: swapDepthsを使った時のマスクとの関係について
swapDepthsなどを使うとレイヤーの順序は無視されるようです。
この場合はマスクに使ってる長方形もMC化して、そこに

onClipEvent (load) {
  this.swapDepths(10);//ステージ上のインスタンスの数以上ならなんでも
}

としておけば、マスクされてるMCが上に飛び出る事はなくなると思いますよ。


----------------
巧-TAQUMI-
http://flashup.jp/~takumi-d/

野中文雄
Åê¹ÆNo.3682
投稿日時: 2004-2-10 20:42
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: swapDepthsを使った時のマスクとの関係について
深度(depth)を変更することは、レイヤーの移動と同じ効果があります。

SWFを書出すとき、レイヤー自体の情報は失われます。しかし、レイヤー上のオブジェクト(オーサリング時のシェイプやグループ、シンボルなどの重ね順をもった描画形状)は、その重ね順にしたがって深度を描画位置(重ね順)として受取ります。いわば、重ね順の整理番号を受取るようなものです。

最背面のオブジェクトを深度-16,384として、その重ね順にしたがい、各オブジェクトがそれぞれユニークな整数値を深度として受取ります。ですから、深度の変更は、重ね順を変えることであり、レイヤーの移動に相当する結果を発生します。
引用:
hidenokiさんは書きました:
swapDepthsを使用するとレイヤー順序が無視されるのでしょうか?


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

hidenoki
Åê¹ÆNo.3691
投稿日時: 2004-2-11 9:04
新米
居住地: 群馬県
投稿: 15
使用環境:
Windows2000
FlashMX-Version6.0
Re: swapDepthsを使った時のマスクとの関係について
kasaiさん、taqumiさん、Fumioさん、ありがとうございます。

 kasaiさんの言う通りにgetDepthで各MCとマスクと枠の深度を調べ、
(Fumioさんの言う通りで、ユニークな深度値を持っていました。)
問題は解決したのですが、新たに疑問が一つ生まれました。

 それは『マスクの深度が一番深い』って事です。
イメージ的にはレイヤー順になっているかと思っていたのですが…
一番深いマスクでどうしてマスクの下にあるレイヤーの表示範囲を制御できるのか不思議です。深度だけを見ると、マスク対象内なのかマスク対象外なのか解らないですし…(マスクの上下レイヤーともマスクより深度が浅い為)
 この『マスクの深度と制御範囲』はどうなっているんでしょうか?
宜しくお願い致します。
野中文雄
Åê¹ÆNo.3695
投稿日時: 2004-2-11 14:14
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: swapDepthsを使った時のマスクとの関係について
SWFの内部処理がどうなっているかは、想像するしかありません。確かに、マスクレイヤー(上のオブジェクト)の深度は、マスク対象のレイヤーの下に配置されるようですね。
// レイヤーは最下層から番号順に配置
_level0.layer1_mc,-16383  // レイヤー1
_level0.maske_mc,-16381  // レイヤー3(マスク)
_level0.masked_mc,-16379  // レイヤー2(マスクの対象)
_level0.layer4_mc,-16375  // レイヤー4

// マスクを外した場合
_level0.layer1_mc,-16383
_level0.masked_mc,-16381
_level0.maske_mc,-16379
_level0.layer4_mc,-16377

引用:
hidenokiさんは書きました:
 それは『マスクの深度が一番深い』って事です。
イメージ的にはレイヤー順になっているかと思っていたのですが…

オーサリング時のインターフェイスとSWFの内部処理は、別個に考える必要があります。たとえば、オーサリング時の「シーン」は、SWF書出し時には消滅し、すべてが1本のタイムラインにつなげられます。

オーサリング時に上から下に設定していたマスクを、(理由はわかりませんが)SWF書出し時には下から上にマスクするということも、理屈上不可能ではありません。
引用:
一番深いマスクでどうしてマスクの下にあるレイヤーの表示範囲を制御できるのか不思議です。深度だけを見ると、マスク対象内なのかマスク対象外なのか解らないですし…(マスクの上下レイヤーともマスクより深度が浅い為)
 この『マスクの深度と制御範囲』はどうなっているんでしょうか?

いずれにしても、マスクレイヤーは表示されませんし、マスクの対象さえ特定できれば、マスク自体の位置(深度)を問うことにあまり意味はないでしょう。つまり、SWFにはマスク対象の深度の「範囲」の情報が存在していると考えるべきです。

そのうえで改めて、上記のマスクレイヤーが存在する場合の各レイヤーの深度を見てみると、本来マスクが存在したのではないかと想像される位置(-16377)が不自然な欠番になっています。想像するに、この欠番がマスクの開始深度、MovieClip.getDepth()メソッドで取得された下層に移動したマスクレイヤーの深度が終了位置(-16381)のように思われます。

実際、マスク対象外のふたつのレイヤー上のMovieClipインスタンスに、以下のMovieClipアクションを設定してクリックすると、マスク対象にすることが可能でした。
// MovieClip: _root.layer4_mc
// MovieClipアクション
on (release) {
	this.swapDepths(_root.masked_mc.getDepth()+2);
	trace([this, this.getDepth()]);  // 出力: _level0.layer4_mc,-16377
}

// MovieClip: _root.layer1_mc
// MovieClipアクション
on (release) {
	this.swapDepths(_root.maske_mc.getDepth()+1);
	trace([this, this.getDepth()]);  // 出力: _level0.layer1_mc,-16380
}


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

hidenoki
Åê¹ÆNo.3696
投稿日時: 2004-2-11 14:40
新米
居住地: 群馬県
投稿: 15
使用環境:
Windows2000
FlashMX-Version6.0
Re: swapDepthsを使った時のマスクとの関係について
Fumioさんのお陰で理解する事ができました。
ありがとうございました。m(__)m
今後とも宜しくお願い致します。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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