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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   お絵かき部屋【グラフィック・アニメ】
     血が滴る
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
rb_r32
Åê¹ÆNo.24097
投稿日時: 2006-3-3 14:50
新米
居住地:
投稿: 20
使用環境:
WinXP,FlashMX2004
血が滴る
お世話になります。

血が窓ガラスについて、窓ガラスをしたたるようなアニメの作成はどのようにしたらできますでしょうか?
SeeDa!!
Åê¹ÆNo.24125
投稿日時: 2006-3-5 3:56
職人
居住地: Nagoya
投稿: 221
使用環境:
WinXP
Flash CS4
au:W33SA?
Re: 血が滴る
血が滴るとはえげつないですね
手書きで描くのはちょっと面倒なので「ペンキが紙に落ちて飛び散る」イメージをスクリプトで表現してみました。
下記のコードをフレームに貼り付けてみてください。
もうちょっと頑張って滴らせてみます
count = 0;
colors = [0xff3300,0xff66cc,0x66ff66,0x3399FF,0xffff33,0x333333,0xff9900];

this.onMouseDown = function() {
	drop = this.createEmptyMovieClip('drop',count++);
	drop._x = _xmouse;
	drop._y = _ymouse;
	num   = 12+Math.floor(Math.random()*4);
	drop_size = 32+Math.floor(Math.random()*32);
	splash_size = drop_size*(Math.random()*0.25+0.5);
	r = Math.PI*2/num;
	opShiftR = r / 8;
	ipShiftR = r / 4;
	// points set
	op_cls = new Array();
	op_crs = new Array();
	ip_cls = new Array();
	ip_crs = new Array();
	for (i = 0; i < num; i++) {
		my_splash = (splash_size/2) + splash_size*Math.random();
		// outControlPoint
		op_cl = new Object();
		op_cl._x = (drop_size + my_splash) * Math.cos(r * i - opShiftR);
		op_cl._y = (drop_size + my_splash) * Math.sin(r * i - opShiftR);
		op_cr = new Object();
		op_cr._x = (drop_size + my_splash) * Math.cos(r * i + opShiftR);
		op_cr._y = (drop_size + my_splash) * Math.sin(r * i + opShiftR);
		// inControlPoint
		my_drop = drop_size-Math.random()*(drop_size/8);
		ip_cl = new Object();
		ip_cl._x = my_drop * Math.cos(r * (i+0.5) - ipShiftR);
		ip_cl._y = my_drop * Math.sin(r * (i+0.5) - ipShiftR);
		ip_cr = new Object();
		ip_cr._x = my_drop * Math.cos(r * (i+0.5) + ipShiftR);
		ip_cr._y = my_drop * Math.sin(r * (i+0.5) + ipShiftR);
		op_cls.push(op_cl);
		op_crs.push(op_cr);
		ip_cls.push(ip_cl);
		ip_crs.push(ip_cr);
	}
	// drawing
	drop.beginFill(colors[Math.floor(Math.random()*colors.length)])
	drop.moveTo((op_crs[0]._x+op_cls[0]._x)/2, (op_crs[0]._y+op_cls[0]._y)/2);
	for (i = 0; i < num; i++) {
		drop.curveTo(op_crs[i]._x, op_crs[i]._y,
					(op_crs[i]._x+ip_cls[i]._x)/2, (op_crs[i]._y+ip_cls[i]._y)/2);
		drop.curveTo(ip_cls[i]._x, ip_cls[i]._y,
					(ip_crs[i]._x+ip_cls[i]._x)/2, (ip_crs[i]._y+ip_cls[i]._y)/2);
		if (i < num-1) {
			drop.curveTo(ip_crs[i]._x, ip_crs[i]._y,
						(ip_crs[i]._x+op_cls[i+1]._x)/2, (ip_crs[i]._y+op_cls[i+1]._y)/2);
			drop.curveTo(op_cls[i+1]._x, op_cls[i+1]._y,
						(op_crs[i+1]._x+op_cls[i+1]._x)/2, (op_crs[i+1]._y+op_cls[i+1]._y)/2);
		} else {
			drop.curveTo(ip_crs[i]._x, ip_crs[i]._y,
						(ip_crs[i]._x+op_cls[0]._x)/2, (ip_crs[i]._y+op_cls[0]._y)/2);
			drop.curveTo(op_cls[0]._x, op_cls[0]._y,
						(op_crs[0]._x+op_cls[0]._x)/2, (op_crs[0]._y+op_cls[0]._y)/2);
		}
	}
	drop.endFill();
}
SeeDa!!
Åê¹ÆNo.24126
投稿日時: 2006-3-5 4:53
職人
居住地: Nagoya
投稿: 221
使用環境:
WinXP
Flash CS4
au:W33SA?
Re: 血が滴る
「血が窓ガラスについて、窓ガラスをしたたるようなアニメ」にしてみました。
もっとリアリティを追求することもできるでしょうけど、プレビューを繰り返すうちに気分が悪くなってきたので、ここまででにしておきます
count = 0;
//colors = [0xff3300,0xff66cc,0x66ff66,0x3399FF,0xffff33,0x333333,0xff9900];
colors = [0xee0000];

this.onMouseDown = function() {
	drop = this.createEmptyMovieClip('drop',count++);
	drop._x = _xmouse;
	drop._y = _ymouse;
	num   = 12+Math.floor(Math.random()*4);
	drop_size = 32+Math.floor(Math.random()*32);
	splash_size = drop_size*(Math.random()*0.25+0.5);
	r = Math.PI*2/num;
	opShiftR = r / 8;
	ipShiftR = r / 4;
	// points set
	op_cls = new Array();
	op_crs = new Array();
	ip_cls = new Array();
	ip_crs = new Array();
	for (i = 0; i < num; i++) {
		my_splash = (splash_size/2) + splash_size*Math.random();
		// outControlPoint
		op_cl = new Object();
		op_cl._x = (drop_size + my_splash) * Math.cos(r * i - opShiftR);
		op_cl._y = (drop_size + my_splash) * Math.sin(r * i - opShiftR);
		op_cr = new Object();
		op_cr._x = (drop_size + my_splash) * Math.cos(r * i + opShiftR);
		op_cr._y = (drop_size + my_splash) * Math.sin(r * i + opShiftR);
		// inControlPoint
		my_drop = drop_size-Math.random()*(drop_size/8);
		ip_cl = new Object();
		ip_cl._x = my_drop * Math.cos(r * (i+0.5) - ipShiftR);
		ip_cl._y = my_drop * Math.sin(r * (i+0.5) - ipShiftR);
		ip_cr = new Object();
		ip_cr._x = my_drop * Math.cos(r * (i+0.5) + ipShiftR);
		ip_cr._y = my_drop * Math.sin(r * (i+0.5) + ipShiftR);
		op_cls.push(op_cl);
		op_crs.push(op_cr);
		ip_cls.push(ip_cl);
		ip_crs.push(ip_cr);
	}
	// drawing
	my_color = colors[Math.floor(Math.random()*colors.length)];
	drop.beginFill(my_color);
	drop.moveTo((op_crs[0]._x+op_cls[0]._x)/2, (op_crs[0]._y+op_cls[0]._y)/2);
	for (i = 0; i < num; i++) {
		drop.curveTo(op_crs[i]._x, op_crs[i]._y,
					(op_crs[i]._x+ip_cls[i]._x)/2, (op_crs[i]._y+ip_cls[i]._y)/2);
		drop.curveTo(ip_cls[i]._x, ip_cls[i]._y,
					(ip_crs[i]._x+ip_cls[i]._x)/2, (ip_crs[i]._y+ip_cls[i]._y)/2);
		if (i < num-1) {
			drop.curveTo(ip_crs[i]._x, ip_crs[i]._y,
						(ip_crs[i]._x+op_cls[i+1]._x)/2, (ip_crs[i]._y+op_cls[i+1]._y)/2);
			drop.curveTo(op_cls[i+1]._x, op_cls[i+1]._y,
						(op_crs[i+1]._x+op_cls[i+1]._x)/2, (op_crs[i+1]._y+op_cls[i+1]._y)/2);
		} else {
			drop.curveTo(ip_crs[i]._x, ip_crs[i]._y,
						(ip_crs[i]._x+op_cls[0]._x)/2, (ip_crs[i]._y+op_cls[0]._y)/2);
			drop.curveTo(op_cls[0]._x, op_cls[0]._y,
						(op_crs[0]._x+op_cls[0]._x)/2, (op_crs[0]._y+op_cls[0]._y)/2);
		}
	}
	drop.endFill();
	// 垂れを加える
	for (i = 0; i < num; i++) {
		// 先端に1本だけ
		my_y = (op_crs[i]._y + op_cls[i]._y)/2;
		if (my_y > 0) {
			my_x = (op_crs[i]._x + op_cls[i]._x)/2;
			// (x,y)の位置を少し内側へ補正
			my_dist = Math.sqrt(my_x*my_x+my_y*my_y)-3;
			my_r    = Math.atan2(my_y,my_x);
			fall = drop.createEmptyMovieClip('f'+i,i);
			fall._x = my_dist * Math.cos(my_r);
			fall._y = my_dist * Math.sin(my_r);
			fall._yscale = 0;
			fall.lineStyle(6,my_color);
			fall.moveTo(0,0);
			fall.lineTo(0,Math.random()*drop._height/3);
			fall.onEnterFrame = function() {
				if (this._yscale <= 100) {
					this._yscale += (100-this._yscale)/32;
				}
			}
		}
	}
}
rb_r32
Åê¹ÆNo.24140
投稿日時: 2006-3-6 10:30
新米
居住地:
投稿: 20
使用環境:
WinXP,FlashMX2004
Re: 血が滴る
SeeDa!! 様、ありがとうございます。
スクリプトでこの表現ができるんですねー
スクリプトまだ初心者ですが、1行ずつ見させていただきます。

気持ち悪いくらいリアルなんですね、凄そうですね^^;

やってみます
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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