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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     as2のsetMask()でlineToで書いた複数の図形をマスクにする
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
natoco
Åê¹ÆNo.39383
投稿日時: 2008-7-1 15:42
新米
居住地:
投稿: 3
使用環境:
Windows XP
Flash 8,CS3

ActionScript2.0, 3.0
FlashLite1.0?
FlashPlayer7,8,9,10
as2のsetMask()でlineToで書いた複数の図形をマスクにする
似たような投稿がありましたが、
setMaskを利用して複数のマスクを1枚の画像に適応させる
やりたい事がすこし違うので、これでは上手くきませんでした。
やり方が悪いのかも知れませんが、自分では解決ができず、質問させて頂きます。宜しくお願いします。

-------環境----------
Windows XP
Flash CS3
ActionScript2.0
FlashPlayer7,8,9
---------------------


<やりたい事>

createEmptyMovieClip でマスク用MC(areaMask_mc)と、マスクがかかるMC(black_mc)を作る。

black_mcに、lineTo() で半透明の矩形を描く。
areaMask_mcに、lineTo() を使って矩形と円を書く。

black_mc に areaMask_mc をマスクとしてセット。

矩形と円でくりぬかれた、black_mc を表示させたい。

のですが、矩形と円が重なった部分がマスクとして適応されません。

------------------------------------------
asは下記の様に書きました。
円を書くfunctionは野中さんのを使わせて頂いてます<(_ _)>
var areaMask_mc = this.createEmptyMovieClip("areaMaskMc", 2);
var black_mc = this.createEmptyMovieClip("whiteMc", 1);
//
black_mc.beginFill(0x000000,40);
black_mc.moveTo(-190,-93);
black_mc.lineTo(640,-93);
black_mc.lineTo(640,761);
black_mc.lineTo(-190,761);
black_mc.setMask(areaMask_mc);
//
areaMask_mc.beginFill(0xFFFF00,100);
areaMask_mc.moveTo(10,10);
areaMask_mc.lineTo(10,300);
areaMask_mc.lineTo(250,250);
areaMask_mc.lineTo(250,10);
areaMask_mc.endFill();
//
areaMask_mc.beginFill(0xFFFF00,100);
xDrawCircle(areaMask_mc,250,150,100);
areaMask_mc.endFill();


//-------------円を描く
function xDrawCircle(target_mc:MovieClip, nX:Number, nY:Number, nR:Number, nSegments:Number) {
	if (nSegments == undefined) {// 分割数の引数省略時
		nSegments = 8;// デフォルト値設定
	}
	var nAngle:Number = 2*Math.PI/nSegments;// 分割した角度(ラジアン)
	target_mc.moveTo(nX+nR,nY);
	for (var i = 1; i<=nSegments; ++i) {// 指定数に分割して弧を描画
		var nTheta:Number = i*nAngle;// 回転角(ラジアン)
		// アンカーポイントの座標
		var nAnchorX:Number = nR*Math.cos(nTheta);
		var nAnchorY:Number = nR*Math.sin(nTheta);
		// コントロールポイントの座標
		var nControlX:Number = nAnchorX+nR*Math.tan(nAngle/2)*Math.cos(nTheta-Math.PI/2);
		var nControlY:Number = nAnchorY+nR*Math.tan(nAngle/2)*Math.sin(nTheta-Math.PI/2);
		// 弧の描画
		target_mc.curveTo(nControlX+nX,nControlY+nY,nAnchorX+nX,nAnchorY+nY);
	}
}


矩形と円を直接 areaMask_mc に書くのではなく、
areaMask_mc に createEmptyMovieClip で a_mc, b_mc を作り、それぞれに lineTo() で書いたモノも試しましたが、結果は同じでした。

矩形が台形で、4点の値をXMLから取得して描画したいため、attachMovie でなく、lineTo() で書く必要があります。
------------------------------------------

よろしくお願いします。<(_ _)>
ひろゆき
Åê¹ÆNo.39385
投稿日時: 2008-7-1 17:24
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: as2のsetMask()でlineToで書いた複数の図形をマスクにする
アカウント編集」で、編集環境は書いておきましょう
プロフィール・使用環境記入のお願い
#その他の欄に記入すれば、使用環境として表示されます。

野中さんのスクリプトと書かれても、何を指しているのか不明です。
引用先のリンクなどを張るべきでしょう。
http://www.fumiononaka.com/TechNotes/Flash/FN0506002.html

また、「矩形」ではなく「台形」だと思いますが。



FlashPlayer8以降の書き出しであれば、
var areaMask_mc = this.createEmptyMovieClip("areaMaskMc", 2);
var black_mc = this.createEmptyMovieClip("whiteMc", 1);

black_mc.beginFill(0x000000,40);
black_mc.moveTo(-190,-93);
black_mc.lineTo(640,-93);
black_mc.lineTo(640,761);
black_mc.lineTo(-190,761);

areaMask_mc.beginFill(0xFFFF00,100);
areaMask_mc.moveTo(10,10);
areaMask_mc.lineTo(10,300);
areaMask_mc.lineTo(250,250);
areaMask_mc.lineTo(250,10);
areaMask_mc.endFill();

areaMask_mc.beginFill(0xFFFF00,100);
xDrawCircle(areaMask_mc,250,150,100);
areaMask_mc.endFill();

black_mc.setMask(areaMask_mc);
black_mc.cacheAsBitmap = true;
areaMask_mc.cacheAsBitmap = true;


function xDrawCircle(target_mc:MovieClip, nX:Number, nY:Number, nR:Number, nSegments:Number){
	if (nSegments == undefined) {
		nSegments = 8;
	}
	var nAngle:Number = 2*Math.PI/nSegments;
	target_mc.moveTo(nX+nR,nY);
	for (var i = 1; i<=nSegments; ++i) {
		var nTheta:Number = i*nAngle;
		var nAnchorX:Number = nR*Math.cos(nTheta);
		var nAnchorY:Number = nR*Math.sin(nTheta);
		var nControlX:Number = nAnchorX+nR*Math.tan(nAngle/2)*Math.cos(nTheta-Math.PI/2);
		var nControlY:Number = nAnchorY+nR*Math.tan(nAngle/2)*Math.sin(nTheta-Math.PI/2);
		target_mc.curveTo(nControlX+nX,nControlY+nY,nAnchorX+nX,nAnchorY+nY);
	}
}


----------------
質問する際は、回答者に具体的な情報を与えてください。

natoco
Åê¹ÆNo.39395
投稿日時: 2008-7-2 11:01
新米
居住地:
投稿: 3
使用環境:
Windows XP
Flash 8,CS3

ActionScript2.0, 3.0
FlashLite1.0?
FlashPlayer7,8,9,10
Re: as2のsetMask()でlineToで書いた複数の図形をマスクにする
返答、ご指摘、有難うございます<(_ _)>

FlashPlayer8以降であれば、cacheAsBitmap を使うとできるんですね。
教えて頂いたとおりで無事できました。
有難うございます。

ただFlashPlayer7でも、同じように表現?する事はできないでしょうか?
やり方はマスクでなくてもいいのですが、スクリプトで複雑な形(2つの図形だけではなく、実際には10個ぐらいいろいろな図形が重なった形のもの)のアルファのかかったムービークリップを作りたいです。

マスク以外の方法がありましたら、ぜひ教えていただきたいです。

よろしくお願いします。
ひろゆき
Åê¹ÆNo.39396
投稿日時: 2008-7-2 13:07
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: as2のsetMask()でlineToで書いた複数の図形をマスクにする
setMaskではなく、マスクレイヤーなら、
複数のムービークリップを重ねても、このようなことは起きなかったように思うので、
バグっぽいですけど。

なので、cacheAsBitmap を使ってみるとか、BitmapData を用いるとか、
いずれにせよ、FlashPlayer7以前だと、回避策は思いつきません。


使用環境に書かれている Flash CS2 というバージョンは存在しないように思います。


----------------
質問する際は、回答者に具体的な情報を与えてください。

natoco
Åê¹ÆNo.39404
投稿日時: 2008-7-3 15:46
新米
居住地:
投稿: 3
使用環境:
Windows XP
Flash 8,CS3

ActionScript2.0, 3.0
FlashLite1.0?
FlashPlayer7,8,9,10
Re: as2のsetMask()でlineToで書いた複数の図形をマスクにする
やはり、FlashPlayer7以前だと無理ですか。

返答有難うございました<(_ _)>
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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