<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Flash Memo for Designers</title>
    <link rel="alternate" type="text/html" href="http://casualplay.net/blog/" />
    <link rel="self" type="application/atom+xml" href="http://casualplay.net/blog/atom.xml" />
   <id>tag:casualplay.net,2008:/blog//1</id>
    <link rel="service.post" type="application/atom+xml" href="http://casualplay.net/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1" title="Flash Memo for Designers" />
    <updated>2008-05-19T05:50:35Z</updated>
    <subtitle>description about Adobe Flash etc.</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type  3.2-ja-2</generator>
 
<entry>
    <title>フリーランスになりました</title>
    <link rel="alternate" type="text/html" href="http://casualplay.net/blog/2008/05/post_6.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://casualplay.net/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=38" title="フリーランスになりました" />
    <id>tag:casualplay.net,2008:/blog//1.38</id>
    
    <published>2008-05-19T05:50:00Z</published>
    <updated>2008-05-19T05:50:35Z</updated>
    
    <summary> 大変ご無沙汰していました。 個人的なご報告になりますが、先日、2年間在籍したb...</summary>
    <author>
        <name>kobas</name>
        
    </author>
            <category term="announcement" />
    
    <content type="html" xml:lang="ja" xml:base="http://casualplay.net/blog/">
        <![CDATA[<p>
大変ご無沙汰していました。
個人的なご報告になりますが、先日、2年間在籍したbAを退職しまして、これからしばらくフリーランスとして活動していきます。関係者の皆様、今まで本当にお世話になりました。
出会えたすべての人に感謝しております。
</p>
<p>
どうも業界内で所謂Flasherと呼ばれる人種は基本的に変態気質というか、まるで社会と迎合しないような印象を持たれていたりしまして、やはり自分も例外なく変わり者扱いをされてやりきれない思いをしましたが、今となってはいい思い出です。
</p>
<p>
すでにやることが山積していますが、個人的にはこれからwebやUIデザインに関連したモノ作りをプラットフォームに拘らず幅広くやっていければと思っています。このブログもタイトル変えて再構築したいです。もっとカジュアルな方向で情報発信できれば。
</p>
<p>
今後の連絡先は以下になります。
</p>
<p>
koba{at}casualplay.net
</p>
<p>
何かありましたらお気軽にお声がけください。<br/>
それでは、今後ともよろしくお願いします。
</p>
]]>
        
    </content>
</entry>
<entry>
    <title>Wiiライクな入力装置とFlash</title>
    <link rel="alternate" type="text/html" href="http://casualplay.net/blog/2006/12/wiiflash.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://casualplay.net/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=36" title="Wiiライクな入力装置とFlash" />
    <id>tag:casualplay.net,2006:/blog//1.36</id>
    
    <published>2006-12-01T17:54:12Z</published>
    <updated>2006-12-02T09:40:35Z</updated>
    
    <summary>入力装置としてのインターフェイスにずっと興味があるのですが、一度こういうの作って...</summary>
    <author>
        <name>kobas</name>
        
    </author>
    
    <content type="html" xml:lang="ja" xml:base="http://casualplay.net/blog/">
        <![CDATA[<p>入力装置としてのインターフェイスにずっと興味があるのですが、一度こういうの作ってみたい。</p>

<object width="425" height="350">
<param name="movie" value="http://www.youtube.com/v/49WBPIIo3EE"></param>
<param name="wmode" value="transparent"></param>
<embed src="http://www.youtube.com/v/49WBPIIo3EE" type="application/x-shockwave-flash"　wmode="transparent" width="425" height="350">
</embed></object>
<p>Wiiがきっかけとなって、入力装置を作る人が増えると面白くなりそうです。</p>
<p>他にも色々と面白そうなことやってますね。まぁオタクな感じではありますが。</p>
<a href="http://www.youtube.com/profile_videos?user=kitdashit">http://www.youtube.com/profile_videos?user=kitdashit</a>]]>
        
    </content>
</entry>
<entry>
    <title>今後の展望</title>
    <link rel="alternate" type="text/html" href="http://casualplay.net/blog/2006/07/post_5.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://casualplay.net/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=27" title="今後の展望" />
    <id>tag:casualplay.net,2006:/blog//1.27</id>
    
    <published>2006-07-21T19:48:16Z</published>
    <updated>2008-05-19T04:13:22Z</updated>
    
    <summary>色々慌しくて更新が止まってますが、8月には更新再開といきたいです。まぁ、もともと...</summary>
    <author>
        <name>kobas</name>
        
    </author>
            <category term="announcement" />
    
    <content type="html" xml:lang="ja" xml:base="http://casualplay.net/blog/">
        <![CDATA[<p>色々慌しくて更新が止まってますが、8月には更新再開といきたいです。まぁ、もともと頻繁に更新するブログではないので。また、過去のソースなども少しずつ整理していきますので、よろしくというかフィードしてもらっている方にはご迷惑かけます。今後はAS3の実験を進めていきながら少しずつ何か作っていくつもりですので、よろしくお願いします。</p>]]>
        
    </content>
</entry>
<entry>
    <title>YouTube APIとFLASHの連携 : VideoJam</title>
    <link rel="alternate" type="text/html" href="http://casualplay.net/blog/2006/04/youtube_apiflash_videojam.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://casualplay.net/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=26" title="YouTube APIとFLASHの連携 : VideoJam" />
    <id>tag:casualplay.net,2006:/blog//1.26</id>
    
    <published>2006-04-16T00:50:32Z</published>
    <updated>2006-04-28T19:53:59Z</updated>
    
    <summary>◆VideoJam （※動画再生できなくなりました） http://casual...</summary>
    <author>
        <name>kobas</name>
        
    </author>
            <category term="Flash+API" />
    
    <content type="html" xml:lang="ja" xml:base="http://casualplay.net/blog/">
        <![CDATA[◆VideoJam （※動画再生できなくなりました）<br/>
<a href = "http://casualplay.net/labs/videojam/">http://casualplay.net/labs/videojam/</a>
<p>※ 詳細は<a href="http://casualplay.net/blog/2006/04/youtube_apiflash_videojam.html#comments">コメント欄</a>にて。</p>]]>
        <![CDATA[<p>何かと話題のYouTubeですが、公開されている<a href="http://www.youtube.com/dev">YouTube API</a>を使って遊んでみました。ショボイ<a href="http://video.qooqle.jp/">Qooqle Video</a>だと思ってください。上のリンクから見れます。検索は英数字のみです。</p>

<p>制作にあたり2回ほど壁にぶち当たりました。1回目の壁は「YouTubeがなんだか消えてるよー」っていうことがありまして、まったく手付かずの状態に。無事復活は果たしましたが、またいつ消えるかわからないので、完成度を上げるより早めに出しとこう、という結論に至りました。</p>

<p>2回目の壁は、<a href="http://blog.graffiti-web.org/archives/2006/01/post_113.html">ここ</a>で議論されていますが、「<strong>外部ドメインから読み込んだ画像（今回は動画）はBitmapData.drawできない</strong>」という謎の仕様をすっかり忘れていて、ローカルで無茶してたことがすべてWEB上では不可能という事態に。</p>

<p>こんなPCに優しくなさそうなことをやろうとしていました。</p>
<script type="text/javascript">swf("videojam_mov", 320, 285);</script>
<noscript>[動画]</noscript>
<p>このままお蔵入りにするのももったいないので、PCに刺激が欲しい人のためにローカル再生用のファイルをご用意しました。できるかぎりハイスペックなマシン推奨です。</p>
<p>◆ VideoJam Local<br/>
<a href = "http://casualplay.net/labs/videojam.zip">http://casualplay.net/labs/videojam.zip</a></p>

<p>色々と試したのですが、どうやら<strong>Flash Player 8.5（ベータ版）ではブラウザが落ちます。</strong>なので、Player8.5 を入れてる方は、Player8.0.xxでご覧ください。</p>
<p>【追記】 一応説明を加えておきますと、ローカルで再生するためにはFlashPlayerのグローバルセキュリティ設定を変更する必要があります。以下のアドレスにアクセスして、「これらのファイルとフォルダを常に信頼する」の欄に、ファイルを保存したフォルダを追加します。</p>
<p><a href="http://www.macromedia.com/support/documentation/jp/flashplayer/help/settings_manager04a.html">http://www.macromedia.com/support/documentation/jp/flashplayer/help/settings_manager04a.html</a></p>

<p>とても面倒で嫌になります。</p>]]>
    </content>
</entry>
<entry>
    <title>Mouse.hide()の落とし穴</title>
    <link rel="alternate" type="text/html" href="http://casualplay.net/blog/2006/04/mousehide.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://casualplay.net/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=25" title="Mouse.hide()の落とし穴" />
    <id>tag:casualplay.net,2006:/blog//1.25</id>
    
    <published>2006-04-05T07:00:13Z</published>
    <updated>2006-04-05T07:56:55Z</updated>
    
    <summary>もう修正済みですが、前回のエントリーで一定時間マウスが同じ位置に止まっていたらM...</summary>
    <author>
        <name>kobas</name>
        
    </author>
            <category term="Tips" />
    
    <content type="html" xml:lang="ja" xml:base="http://casualplay.net/blog/">
        <![CDATA[<p>もう修正済みですが、<a href="http://casualplay.net/blog/2006/04/_displacementmapfilter_2.html">前回のエントリー</a>で一定時間マウスが同じ位置に止まっていたらMouse.hide()でカーソルを隠す処理を当初していたのですが、気づいた方もいたかと思いますけど、これがswf領域外でもカーソルが消えてしまうというミステリー。というか単純に知らなかっただけなんですが。カーソルを動かすと現れ、止まるとまた消えてしまう･･･。</p>
<p>同一ページ内に限れば回避策もあるのですが、カーソルが隠れた状態で新しいタブとか開かれたらもうどうしようもないので、setIntervalやonEnterFrameとMouse.hide()の併用は極力避けた方が無難な感じです。</p>
<p>カーソルを消したい方は下の矩形を押してから外に出てみましょう。別のページに移動すれば戻ります。</p>
<script type="text/javascript">swf("mouse_hide",240,160);</script>  ]]>
        
    </content>
</entry>
<entry>
    <title>ゆがみエフェクト - DisplacementMapFilter</title>
    <link rel="alternate" type="text/html" href="http://casualplay.net/blog/2006/04/_displacementmapfilter_2.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://casualplay.net/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=24" title="ゆがみエフェクト - DisplacementMapFilter" />
    <id>tag:casualplay.net,2006:/blog//1.24</id>
    
    <published>2006-04-03T11:31:35Z</published>
    <updated>2006-04-05T06:46:22Z</updated>
    
    <summary>swf(&quot;dmf_warp&quot;, 360, 360);...</summary>
    <author>
        <name>kobas</name>
        
    </author>
            <category term="Actionscript" />
            <category term="FLASH8" />
    
    <content type="html" xml:lang="ja" xml:base="http://casualplay.net/blog/">
        <![CDATA[<script type = "text/javascript">swf("dmf_warp", 360, 360);</script>]]>
        <![CDATA[<p>またDisplacementMapFilterを使って、Photoshopのゆがみ（ワープ）フィルタ。モナリザを使ったモノはありがちですけど、他にいいネタも無かったので。</p>
<p>フォトショっぽくクリックで変化させてもよかったですが、あまり変化量を上げすぎると画像が荒くなるので、微妙な変化の方が使えるんだと思います。</p>

<pre>
import flash.display.*;
import flash.filters.*;
import flash.geom.*;

var imgList:String = <strong>"image"</strong>; <strong>// リンケージ画像id</strong>

var w:Number = 240;
var h:Number = 360;
var scalex:Number = 0;
var scaley:Number = 0;
var d:Number = 0;

var scalemx:Number = 80; <strong>// xscale変化量</strong>
var scalemy:Number = 80; <strong>// yscale変化量</strong>
var r:Number = 60; <strong>// フィルタ適用範囲の直径</strong>
var speed:Number = 8; <strong>// 変化の移動速度</strong>

<strong>// -- 適用イメージ & マスク作成</strong>

var bmp:BitmapData = BitmapData.loadBitmap(imgList);
var copybmp:BitmapData = bmp.clone();

var mc:MovieClip = this.createEmptyMovieClip("img_mc", 2);
var mask:MovieClip = this.createEmptyMovieClip("mask_mc", 3);
var maskbmp:BitmapData = new BitmapData(w, h, false, 0);
mask.attachBitmap(maskbmp, 0);

var mgx:Number = (bmp.width-w)/2;
var mgy:Number = (bmp.height-h)/2;
mc._x -= mgx;
mc._y -= mgy;
mc.attachBitmap(bmp, 0);
mc.setMask(mask);

<strong>// -- 置き換えマップ用イメージ作成</strong>

var dpmap:BitmapData = new BitmapData(w, w, true, 0);
var dmc:MovieClip = this.createEmptyMovieClip("img_mc", 1);
var mrx:Matrix = new Matrix(1, 0, 0, 1, w/2, w/2);

dmc.beginGradientFill("radial", [0xFFFFFF, 0x808080], [100, 100], [0, r/2], mrx);
dmc.moveTo(0, 0);
dmc.lineTo(w, 0);
dmc.lineTo(w, w);
dmc.lineTo(0, w);
dmc.lineTo(0, 0);
dmc.endFill();

dpmap.draw(dmc);
dmc.removeMovieClip();

<strong>// -- フィルタ適用</strong>

function onEnterFrame ():Void {
    d += Math.PI/180*speed;
    scalex = Math.cos(d)*scalemx;
    scaley = Math.sin(d)*scalemy;
    var pos:Point = new Point(_xmouse-w/2+mgx, _ymouse-w/2+mgy);
    var dmf:DisplacementMapFilter = 
        new DisplacementMapFilter(dpmap, pos, 1, 1, scalex, scaley, "ignore");
    bmp.applyFilter(copybmp, bmp.rectangle, null, dmf);
}
</pre>]]>
    </content>
</entry>
<entry>
    <title>波紋エフェクト - DisplacementMapFilter</title>
    <link rel="alternate" type="text/html" href="http://casualplay.net/blog/2006/03/_displacementmapfilter_1.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://casualplay.net/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=23" title="波紋エフェクト - DisplacementMapFilter" />
    <id>tag:casualplay.net,2006:/blog//1.23</id>
    
    <published>2006-03-19T16:02:04Z</published>
    <updated>2006-03-19T22:32:06Z</updated>
    
    <summary> swf(&quot;dmf_water&quot;, 360, 240); ...</summary>
    <author>
        <name>kobas</name>
        
    </author>
            <category term="Actionscript" />
            <category term="FLASH8" />
    
    <content type="html" xml:lang="ja" xml:base="http://casualplay.net/blog/">
        <![CDATA[<script type = "text/javascript"> swf("dmf_water", 360, 240); </script>]]>
        <![CDATA[<p>結構スタンダードなエフェクトだと思いますけど、一応のせときます。perlinNoiseで移動させた画像を置き換えマップに使用しただけ。マウス位置で変化量が変わります。他のフィルタと組み合わせて立体感を出すつもりでしたが、フィルタを重ねるとどうしても重くなってしまうので断念。ま、これだけでも充分重い気がしますけど。</p>
<p>数値を調整したり他のエフェクトと組み合わせれば、陽炎や磨りガラスなどの効果も可能ですが、モーションをつける場合は、ちょっと大きい描画領域に適用すると重くなってしまうので、なかなか使いどころが難しいです。</p>
<p>ちなみに、DisplacementMapFilterを適用する画像は表示領域よりも少し大きめの画像を用意する必要があります。そうしないと、フィルタを適用した際、アウトラインがはみ出してしまってかっこ悪いのです。</p>
<p>DisplacementMapFilterについては<a href = "http://casualplay.net/blog/2005/12/_displacementmapfilter.html">以前のエントリー（ゆらゆら揺れる文字 - DisplacementMapFilter）</a>を参考に。</p>
<pre>
import flash.display.*;
import flash.filters.*;
import flash.geom.*;

var w:Number = 360;
var h:Number = 240;
var octaves:Number = 3;
var offset:Array = new Array();
var speed:Array = new Array();
var rdm:Number = Math.floor(Math.random()*10000);

<strong>// -- MC "image"をステージ上に配置。</strong>

var image:MovieClip;
var bmp:BitmapData = new BitmapData(w, h, false, 0);
var mappoint:Point = new Point((image._width-w)/2, (image._height-h)/2);

<strong>// -- perlinNoise 移動量設定</strong>

for (var i:Number = 0; i < octaves; i++) {
	offset[i] = new Point(Math.random()*w, Math.random()*h);
	speed[i] = new Point(Math.random()*2-1, Math.random()*2-1);
}

<strong>// -- エフェクト適用</strong>

this.onEnterFrame = function ():Void {
	for(var i:Number = 0; i < octaves; i++){
		offset[i].x += speed[i].x;
		offset[i].y += speed[i].y;
	}
	<strong>//  マウス位置によって変化量を調整</strong>
	var scalex:Number = (this._xmouse-w/2)/5;
	var scaley:Number = (this._ymouse-h/2)/5;

	bmp.perlinNoise(w/30, h/30, octaves, rdm, false, true, 1, true, offset);
	var dmf:DisplacementMapFilter = 
	new DisplacementMapFilter(bmp, mappoint, 1, 1, scalex, scaley);
	image.filters = [dmf];
}
</pre>]]>
    </content>
</entry>
<entry>
    <title>渦巻きトランジッション - threshold</title>
    <link rel="alternate" type="text/html" href="http://casualplay.net/blog/2006/03/_threshold.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://casualplay.net/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=22" title="渦巻きトランジッション - threshold" />
    <id>tag:casualplay.net,2006:/blog//1.22</id>
    
    <published>2006-03-13T17:01:32Z</published>
    <updated>2006-03-19T22:30:48Z</updated>
    
    <summary> swf(&quot;threshold_ts&quot;, 360, 240); ...</summary>
    <author>
        <name>kobas</name>
        
    </author>
            <category term="Actionscript" />
            <category term="FLASH8" />
    
    <content type="html" xml:lang="ja" xml:base="http://casualplay.net/blog/">
        <![CDATA[<script type = "text/javascript"> swf("threshold_ts", 360, 240); </script>]]>
        <![CDATA[<p>スクリプトの内容は<a href = "http://casualplay.net/blog/2006/03/_thresholdperlinnoise.html">前回のエントリー（紙が燃えていくようなトランジッション）</a>とほぼ同様ですが、今後も使い回せると思うのでClassファイルにしておきました。数値なども少しだけ変更を加えています。</p>

<p>前回はperlinNoiseでしきい値を計るソースイメージを生成していましたが、今回はあらかじめ用意した画像を読み込む形にしています。これで画像を入れ替えるだけでまったく違った効果ができてしまうわけです。</p>
<p>今回はPhotoshopで作った下の画像を使用。<p>

<img src = "http://casualplay.net/blog/images/threshold_bmp.jpg"/ alt = "マスク用イメージ" width = "360" height = "240">

<p>黒い部分から白い部分にかけて消えていきます。この場合、中心から外側にかけて白を強くしているので、中心からイメージが切り替わるようになります。</p>
<p>ちなみに今回は1回目と2回目でマスク用のソース画像を反転させているため、逆再生になっています。</p>
<p><strong>Transition.as</strong></p>
<pre>
import flash.display.*;
import flash.filters.*;
import flash.geom.*;

class Transition {
	
	private var W:Number;
	private var H:Number;
	
	private var blur:BlurFilter;
	private var glow:GlowFilter;

	private var src_bmp:BitmapData;
	private var mask1_bmp:BitmapData;
	private var mask2_bmp:BitmapData;
	
	private var image1:MovieClip;
	private var image2:MovieClip;
	private var mc1:MovieClip;
	private var mc2:MovieClip;
	private var gmc:MovieClip;
	private var disp:MovieClip;
	
	function Transition (p:MovieClip, m1:MovieClip, m2:MovieClip, id:String) {
		
		W = m1._width;
		H = m1._height;
		image1 = m1;
		image2 = m2;

		blur = new BlurFilter(1.5, 1.5, 2);
		glow = new GlowFilter(0xFFFFFF, 100, 8, 8, 3, 2, false, true);
		
		src_bmp = BitmapData.loadBitmap(id);
		mask1_bmp = new BitmapData(W, H, true, 0xFFFFFFFF);
		mask2_bmp = new BitmapData(W, H, true, 0xFFFFFFFF);
		
		mc1 = p.createEmptyMovieClip("mc1", 0);
		mc2 = p.createEmptyMovieClip("mc2", 1);
		gmc = p.createEmptyMovieClip("g_mc", 2);
		disp = p.createEmptyMovieClip("d_mc", 3);
		
		mc1.attachBitmap(mask1_bmp, 0);
		mc2.attachBitmap(mask2_bmp, 0);
		gmc.attachBitmap(mask1_bmp, 0);
		
		gmc.blendMode = "overlay";
		gmc.filters = [glow];
		mc1.filters = [blur];
		mc2.filters = [blur];
		
		p.onLoad = function ():Void {
			mc1.cacheAsBitmap = true;
			mc2.cacheAsBitmap = true;
			image1.cacheAsBitmap = true;
			image2.cacheAsBitmap = true;
			image1.setMask(mc1);
			image2.setMask(mc2);
		}
		p.onLoad();
	}
	
	public function changeImage(m:MovieClip):Void {
		
		var mask:BitmapData;
		var m2:MovieClip;
		var thr:Number = 0;
		var b:BitmapData = src_bmp;
		var clr:ColorTransform = new ColorTransform(-1, -1, -1, 1, 255, 255, 255, 0);

		if (m == image1) { 
			mask = mask1_bmp;
			m2 = image2; 
		} else {
			mask = mask2_bmp;
			m2 = image1; 
		}
		gmc.attachBitmap(mask, 0);
		
		m.onEnterFrame = function():Void {
			if (thr > 0xCFFFFF) {
				mask.fillRect(mask.rectangle, 0xFFFFFFFF);
				m.attachBitmap(mask);
				thr = 0x000000;
				m.swapDepths(m2);
				b.colorTransform(b.rectangle, clr);
				delete m.onEnterFrame;
			} else {
				thr += (0xFFFFFF-thr)*0.03;
				mask.threshold(b, b.rectangle, new Point(0, 0), "<=", thr, 0, 0x00FFFFFF , false);
			}
		}
	}
	
}
</pre>

<p><strong>1フレーム目</strong></p>
<pre>
<strong>
// -- ステージ上にMC image1, image2を配置。
// -- 現在のパス、画像MC1、画像MC２、マスク用画像のid （リンケージ設定で書き出しておく）</strong>

var ts:Transition = new Transition(this, image1, image2, <strong>"imageID"</strong>);

image1.onRelease = function():Void{
	ts.changeImage(image1);
}

image2.onRelease = function():Void{
	ts.changeImage(image2);
}
</pre>]]>
    </content>
</entry>
<entry>
    <title>紙が燃えていくようなトランジッション - threshold/perlinNoise</title>
    <link rel="alternate" type="text/html" href="http://casualplay.net/blog/2006/03/_thresholdperlinnoise.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://casualplay.net/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=21" title="紙が燃えていくようなトランジッション - threshold/perlinNoise" />
    <id>tag:casualplay.net,2006:/blog//1.21</id>
    
    <published>2006-03-09T11:30:59Z</published>
    <updated>2006-03-09T20:11:07Z</updated>
    
    <summary>swf(&quot;paper_burn&quot;, 360, 240);...</summary>
    <author>
        <name>kobas</name>
        
    </author>
            <category term="Actionscript" />
            <category term="FLASH8" />
    
    <content type="html" xml:lang="ja" xml:base="http://casualplay.net/blog/">
        <![CDATA[<script type = "text/javascript">swf("paper_burn", 360, 240);</script>]]>
        <![CDATA[<p>perlinNoiseで生成した雲模様ビットマップをアルファチャンネルマスクのしきい値を計るソースイメージとして使用し、thresholdメソッドを使ってしきい値の値を黒(0x000000)から白(0xFFFFFF)に近づけ、しきい値以下をアルファ(0x00000000)に置き換えていくことで、こんな感じに。しきい値の数値が一定に達したところで処理を停止し、画像の深度を入れ替えています。</p>
<p>今回、焦点がずれるので2つの画像は外部から読み込まずにステージ上にMCを配置しました。画像を外部から読み込む形にする場合、loadClipを使って読み込み処理を終えたことを確認してからsetMaskでマスク処理、という手順が必要なのでご注意を。</p>
<pre>
import flash.display.*;
import flash.filters.*;
import flash.geom.*;

var w:Number = 360;
var h:Number = 240;
var thr:Number = 0x000000;
var rdm:Number = Math.floor(Math.random()*10000);

<strong>// -- image1, image2 はステージ上に配置。 ( image1を上に配置)</strong>

var image1:MovieClip;
var image2:MovieClip;

var blur:BlurFilter = new BlurFilter(1.2, 1.2, 2);
var glow:GlowFilter = new GlowFilter(0x4C2E00, 100, 8, 8, 4, 2, true, true);

var bmp:BitmapData = new BitmapData(w+20, h+20, false, 0);
var mask_bmp:BitmapData = new BitmapData(w+20, h+20, true, 0xFFFFFFFF);
var mask2_bmp:BitmapData = new BitmapData(w+20, h+20, true, 0xFFFFFFFF);

var mc:MovieClip = this.createEmptyMovieClip("mc", 0);
var mc2:MovieClip = this.createEmptyMovieClip("mc2", 1);
var gmc:MovieClip = this.createEmptyMovieClip("g_mc", 3);

mc._x = mc._y = -10;
mc2._x = mc2._y = -10;
gmc._x = gmc._y = -10;

mc.attachBitmap(mask_bmp, 0);
mc2.attachBitmap(mask2_bmp, 0);
gmc.attachBitmap(mask_bmp, 0);

gmc.blendMode = "multiply";
gmc.filters = [glow];
mc.filters = [blur];
mc2.filters = [blur];

<strong>// -- アルファチャンネルマスクとして使用するため、cacheAsBitmapを有効に。</strong>

mc.cacheAsBitmap = true;
mc2.cacheAsBitmap = true;
image1.cacheAsBitmap = true;
image2.cacheAsBitmap = true;

image1.setMask(mc);
image2.setMask(mc2);

<strong>// -- トランジッション処理 </strong>

function burnImage(mask:BitmapData, m:MovieClip):Function {
	gmc.attachBitmap(mask, 0);
	return function():Void {
		if (thr > 0xCFFFFF) {
			mask.fillRect(mask.rectangle, 0xFFFFFFFF);
			m.attachBitmap(mask);
			thr = 0x000000;
			if (m == image1) { m2 = image2; }
			else { m2 = image1; }
			m.swapDepths(m2);
			delete this.onEnterFrame;
		} else {
			thr += (0xFFFFFF-thr)*0.03;
			mask.threshold(bmp, bmp.rectangle, new Point(0, 0), "<=", thr, 0, 0x00FFFFFF , false);
		}
	}
}

<strong>// -- 雲模様画像生成 </strong>

function createPerlinNoise():Void {
	rdm = Math.floor(Math.random()*10000);
	bmp.perlinNoise(100, 100, 5, rdm, false, true, 1, true);
}

<strong>// -- ボタン処理 </strong>

image1.onRelease = function():Void{
	createPerlinNoise();
	this.onEnterFrame = burnImage(mask_bmp, image1);
}

image2.onRelease = function():Void{
	createPerlinNoise();
	this.onEnterFrame = burnImage(mask2_bmp, image2);
}
</pre>]]>
    </content>
</entry>
<entry>
    <title>ねじれて回転するドット</title>
    <link rel="alternate" type="text/html" href="http://casualplay.net/blog/2006/02/post_4.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://casualplay.net/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=20" title="ねじれて回転するドット" />
    <id>tag:casualplay.net,2006:/blog//1.20</id>
    
    <published>2006-02-24T15:08:02Z</published>
    <updated>2006-02-25T00:49:40Z</updated>
    
    <summary>swf(&quot;led1&quot;, 360, 240);...</summary>
    <author>
        <name>kobas</name>
        
    </author>
            <category term="Actionscript" />
            <category term="FLASH8" />
    
    <content type="html" xml:lang="ja" xml:base="http://casualplay.net/blog/">
        <![CDATA[<script type = "text/javascript">swf("led1", 360, 240);</script>]]>
        <![CDATA[<p>
適当な３Ｄっぽいグラフィック。書き出すMC("dot")に円を並べて、タイムラインで拡大/縮小とグロー変化アニメーション。スクリプトでは、ドットを並べてMCの再生開始位置をずらすだけ。昔作ったものですが、グローやブレンドモード加えるだけでそれなりに変わるので面白い。
</p>

<pre>
import flash.filters.*;

var maxi:Number = 16;
var margin:Number = 12;
var w:Number = 360;
var h:Number = 240;
var blur:BlurFilter = new BlurFilter(3, 3, 2);
var dots:MovieClip = this.createEmptyMovieClip("dots_mc", 0);

dots._x = w/2;
dots._y = h/2;
dots.filters = [blur];

for(var i:Number = 1; i < maxi; i++){ 
	var pt:Object = {_x:margin*i-(maxi*margin/2), _y:margin*i-(maxi*margin/2)};
	var mc:MovieClip = dots.attachMovie("dot", "dot"+i, i, pt);
	mc.blendMode = "add";
	mc.gotoAndPlay(i*2);
}

dots.onEnterFrame = function () {
	this._rotation += 2;
}

</pre>]]>
    </content>
</entry>
<entry>
    <title>『24』風モーションタイポ</title>
    <link rel="alternate" type="text/html" href="http://casualplay.net/blog/2006/02/flash24.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://casualplay.net/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=19" title="『24』風モーションタイポ" />
    <id>tag:casualplay.net,2006:/blog//1.19</id>
    
    <published>2006-02-16T11:54:22Z</published>
    <updated>2006-02-16T12:12:41Z</updated>
    
    <summary>swf(&quot;logo_24&quot;, 360, 240);...</summary>
    <author>
        <name>kobas</name>
        
    </author>
            <category term="FLASH8" />
    
    <content type="html" xml:lang="ja" xml:base="http://casualplay.net/blog/">
        <![CDATA[<script type ="text/javascript">swf("logo_24", 360, 240);</script>]]>
        <![CDATA[<p>なんとなく作ってみました。決して忠実には再現していませんよ。たまにはスクリプトを使わずに、タイムラインのみでブレンドモードを駆使して作成。</p>
<p>フォントはコチラのサイトから使用させていただきました。<br/>
<a href="http://www.ayatoweb.com/download.html">http://www.ayatoweb.com/download.html</a></p>

<p>『24』 参考：<br/>
<a href="http://www.so-net.ne.jp/24/">http://www.so-net.ne.jp/24/</a></p>

]]>
    </content>
</entry>
<entry>
    <title>燃える円陣 - draw</title>
    <link rel="alternate" type="text/html" href="http://casualplay.net/blog/2006/01/post.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://casualplay.net/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=18" title="燃える円陣 - draw" />
    <id>tag:casualplay.net,2006:/blog//1.18</id>
    
    <published>2006-01-21T13:59:52Z</published>
    <updated>2006-07-20T15:50:52Z</updated>
    
    <summary>swf(&quot;circle_fire&quot;, 360, 240); ...</summary>
    <author>
        <name>kobas</name>
        
    </author>
            <category term="Actionscript" />
            <category term="FLASH8" />
    
    <content type="html" xml:lang="ja" xml:base="http://casualplay.net/blog/">
        <![CDATA[<script type="text/javascript">swf("circle_fire", 360, 240);</script>
]]>
        <![CDATA[<p>アニメーションはタイムラインで作成し、MCの配置とエフェクトのみスクリプトで記述。</p>
<pre>
import flash.filters.*;
import flash.display.*;
import flash.geom.*;

var w:Number = 360;
var h:Number = 240;
var r:Number = 90;
var maxi:Number = 50;
var th_init:Number = 0;
var th:Number = th_init/180*Math.PI;
var bmp:BitmapData = new BitmapData(w, h, true, 0);
var canvas:MovieClip = this.createEmptyMovieClip("canvas", 0);
var bmc:MovieClip;
var clr:ColorTransform = new ColorTransform(.3, .3, .3, .3, -30, 20, 10, 0);

var mat:Matrix = new Matrix(1, 0, 0, 1, w/2, h-40);
var blend:String = "add";
var blur:BlurFilter = new BlurFilter(4, 2, 2);
var maxh:Number = 100;
var minh:Number = 50;

var rate:Number = 1;

var clrmat:ColorMatrixFilter = new ColorMatrixFilter([
		1, 0, 0, 0, 0,
		0, 1, 0, 0, 0,
		0, 0, 1, 0, 0,
		0, 0, 0, .9, 0
		]);
var count:Number = 0;
canvas.attachBitmap(bmp,0);

bmc = this.createEmptyMovieClip("bmc",1);
bmc._x = w/2;
bmc._y = h/2;
bmc._visible = false;
for(var i:Number = 0; i < maxi; i++) {
	var f:MovieClip = bmc.attachMovie("c", "f"+i, i);
	f._yscale = Math.random()*(maxh-minh)+minh;
	f._x = Math.cos(th)*r;
	f._y = Math.sin(th)*r/3;
	f.filters = [blur];
	f.gotoAndPlay (i%f._totalframes);
	th += 360/maxi*(Math.PI/180);
}

this.onEnterFrame = function() :Void {
	if(++count%rate == 0) {
		bmp.draw(bmc, mat, clr, blend, null);
		bmp.applyFilter(bmp, bmp.rectangle, null, blur);
		bmp.applyFilter(bmp, bmp.rectangle, null, clrmat);
	}
}
</pre>]]>
    </content>
</entry>
<entry>
    <title>ブロックが崩れるトランジッション - copyPixels</title>
    <link rel="alternate" type="text/html" href="http://casualplay.net/blog/2005/12/_copypixels.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://casualplay.net/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=17" title="ブロックが崩れるトランジッション - copyPixels" />
    <id>tag:casualplay.net,2005:/blog//1.17</id>
    
    <published>2005-12-22T10:12:51Z</published>
    <updated>2005-12-23T04:23:58Z</updated>
    
    <summary> ...</summary>
    <author>
        <name>kobas</name>
        
    </author>
            <category term="Actionscript" />
            <category term="FLASH8" />
    
    <content type="html" xml:lang="ja" xml:base="http://casualplay.net/blog/">
        <![CDATA[<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="360" height="240" id="grid_crumble" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="http://casualplay.net/blog/swf/grid_crumble.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#000000" /><embed src="http://casualplay.net/blog/swf/grid_crumble.swf" quality="high" bgcolor="#000000" width="360" height="240" name="grid_crumble" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>]]>
        <![CDATA[<p>コードが長くて整理できないので、今のところ、簡単な手順説明だけで。ちゃんとしたら載せます。</p>

<div id = "fr">
<p>
1. MC1に画像を読み込む。<br/>
2. ビットマップ1にMC1をdrawでコピー。(→不要になったMC1は削除。)<br/>
3. MC2を作成。<br/>
4. MC2の中にブロックMC216個を並べて配置。<br/>
5. ブロックMCと同じサイズのビットマップ2を作成。<br/>
6. ビットマップ2にビットマップ1をcopyPixelsで開始位置(Point)を変更してコピー。<br/>
7. それぞれのブロックMCにビットマップ2をatatchBitmapで貼り付け。<br/>
8. 1～7までを繰り返す。(二つのMC2をそれぞれMC2a、MC2bとする。)<br/>
9. onMouseDownでMC2a内のブロック崩壊。<br/>
10. MC2a内の全ブロック落下後、MC2aの深度をMC2bと入れ替えて背面に配置。
</p>
</div>]]>
    </content>
</entry>
<entry>
    <title>ゆらゆら揺れる文字 - DisplacementMapFilter</title>
    <link rel="alternate" type="text/html" href="http://casualplay.net/blog/2005/12/_displacementmapfilter.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://casualplay.net/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=16" title="ゆらゆら揺れる文字 - DisplacementMapFilter" />
    <id>tag:casualplay.net,2005:/blog//1.16</id>
    
    <published>2005-12-17T19:55:36Z</published>
    <updated>2005-12-20T12:53:05Z</updated>
    
    <summary> ...</summary>
    <author>
        <name>kobas</name>
        
    </author>
            <category term="Actionscript" />
            <category term="FLASH8" />
    
    <content type="html" xml:lang="ja" xml:base="http://casualplay.net/blog/">
        <![CDATA[<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="360" height="240" id="dmf01.swf" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="http://casualplay.net/blog/swf/dmf01.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src="http://casualplay.net/blog/swf/dmf01.swf" quality="high" bgcolor="#ffffff" width="360" height="240" name="dmf01.swf" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>]]>
        <![CDATA[<p>DisplacementMapFilterは、特定のビットマップ(置き換えビットマップイメージ)のピクセル値に基づいて、ムービークリップやビットマップを変形させることができます。PhotoShopでいうと、［フィルタ］メニューから［変形］→［置き換え］で同様の効果。</p>
<p>下図の場合、赤を基準にY方向へ移動させているため、置き換えビットマップの赤の値が中間値（128)より小さいピクセルほど下（正)方向に移動し、赤の値が大きいピクセルほど上（負)方向に変化します。</p>
<img src = "http://casualplay.net/blog/images/dmf_img.gif" width="360" height="290" alt="DisplacementMapFilterイメージ"/>
<p>
慣れるまで結構しんどいフィルタですが、よく使う変形のグラデーションパターンを一度作ってしまえば、あとは使いまわすことができます。特に厳密な計算をする必要がない場合は、ステージ上で置き換えマップを作ってしまってもよいかと思います。<br/>
以下のサンプルでは、埋め込みフォントを使用する際、必要な文字を埋め込んだダイナミックテキストを別途ステージに配置しておくか、リンケージ設定で書き出しておく必要があります。</p>
<pre>
import flash.display.*;
import flash.filters.*;
import flash.geom.*;

var w:Number = 360;
var h:Number = 240;

<strong>// --- 置き換えマップイメージ作成</strong>
var map:BitmapData = new BitmapData(w,h, true ,0);
var mc:MovieClip = this.createEmptyMovieClip("m", 1);
var matrix:Matrix = new Matrix();
matrix.createGradientBox(30, 1, 0, 15, 0);
mc.beginGradientFill("linear", [0xFF0000, 0x0000FF], [100, 100], [34, 220], matrix, "reflect");
mc.moveTo(0, 0);
mc.lineTo(w, 0);
mc.lineTo(w, h);
mc.lineTo(0, h);
mc.lineTo(0, 0);
mc.endFill();

map.draw(mc);
mc.removeMovieClip();
</pre>
<pre>
<strong>// --- テキスト作成</strong>
var txtbox:MovieClip = this.createEmptyMovieClip("txt_mc", 2);
var copytxt:TextField = txtbox.createTextField("copy_txt", 1, 0, 15, 200, 20);
var fmt:TextFormat = new TextFormat();
fmt.font = <strong>"フォントを入力"</strong>;
fmt.size = 20;
copytxt.setNewTextFormat(fmt);
copytxt.embedFonts = true;
copytxt.text = "ゆらゆらゆらゆら";
copytxt.selectable = false;
copytxt.textColor = 0xFFFFFF;
copytxt.autoSize = true;

txtbox._x = (w-txtbox._width)/2;
txtbox._y = (h-txtbox._height)/2;
txtbox.blendMode = "add";
</pre>
<pre>
<strong>// --- フィルタ 変数</strong>
var glow:GlowFilter = new GlowFilter(0x0044CC, 20, 10, 10, 5, 3, false, false);
var blurx:Number = 20; 
var blury:Number = 10;
var alp:Number = 5;

var pos:Point = new Point(-txtbox._width, 0);
var goal:Point = new Point(txtbox._width+240, 0)

<strong>// --- フィルタ適用</strong>
this.onEnterFrame = function():Void {
	var dmf:DisplacementMapFilter = new DisplacementMapFilter(map, pos, 1, 1, 10, 25, "clamp");
	var blur:BlurFilter = new BlurFilter(blurx, blury, 3);
	var matrix:Array = [
		1, 1, .5, 0, 1, 
		1, 1, .5, 0, 1, 
		2, .5, 1, 0, 1, 
		0, 0, 0, alp, 0
		];
	var clrmrx:ColorMatrixFilter = new ColorMatrixFilter(matrix);
	txtbox.filters = [dmf, glow, blur, clrmrx];
	if(Math.abs(pos.x-goal.x) <= 120){
		pos.x = -txtbox._width;
		blurx = 20;
		blury = 10;
		alp = 5;
	}
	pos.x += (goal.x-pos.x)*0.01;
	blurx += -blurx*0.035;
	blury += -blury*0.035;
	alp += (1-alp)*0.07;
}
</pre>]]>
    </content>
</entry>
<entry>
    <title>迫りくる光 - draw</title>
    <link rel="alternate" type="text/html" href="http://casualplay.net/blog/2005/12/_draw.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://casualplay.net/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=15" title="迫りくる光 - draw" />
    <id>tag:casualplay.net,2005:/blog//1.15</id>
    
    <published>2005-12-03T20:45:31Z</published>
    <updated>2006-06-15T12:30:41Z</updated>
    
    <summary>swf(&quot;draw_02&quot;, 360, 240);...</summary>
    <author>
        <name>kobas</name>
        
    </author>
            <category term="Actionscript" />
            <category term="FLASH8" />
    
    <content type="html" xml:lang="ja" xml:base="http://casualplay.net/blog/">
        <![CDATA[<script type = "text/javascript">swf("draw_02", 360, 240);</script>]]>
        <![CDATA[<p>matrixを使いこなせるようになると、drawメソッドでビットマップを自由に操作することができます。</p>
<img src = "http://casualplay.net/blog/images/draw_img.gif" alt="draw イメージ">
<p>サンプルでは、matrix.scaleで拡大させていますが、左上を基準に拡大されるため、このままだと中心がズレてしまうので、matrix.translateで移動量だけ中心に戻しています。カラーはタイムラインで変化させて、フレームに飛ばしてます。</p>

<pre>
import flash.display.*;
import flash.geom.*;
import flash.filters.*;

var scale:Number = 1.24;
var blur:BlurFilter = new BlurFilter(1, 1, 2);
var dep:Number = 0;

this.createEmptyMovieClip("src_mc",1);
this.createEmptyMovieClip("cap_mc",2);

var src:BitmapData = new BitmapData(360, 240, true, 0);
var cap:BitmapData = src.clone(); 
src_mc.attachBitmap(src, 1);
 
var matrix:Matrix = new Matrix();
var clr:ColorTransform = new ColorTransform();

matrix.scale(scale, scale); 
matrix.translate((cap.width-cap.width*scale)/2, (cap.height-cap.height*scale)/2);

this.onEnterFrame = function():Void {
	createParticle();
	cap.draw(this);
	cap.applyFilter(cap, cap.rectangle, new Point(0,0), blur);
	src.draw(cap, matrix, clr, "normal", src.rectangle, true);
}

function createParticle():Void {
	dep++;
	var part:MovieClip = cap_mc.attachMovie("star", "star_mc" + dep, dep);
	part.blendMode = "hardlight";
	part._x = cap_mc._xmouse;
	part._y = cap_mc._ymouse;
	part.gotoAndPlay(Math.floor(dep%part._totalframes)+1);
	part._xscale = part._yscale = 25 + 75*Math.random();
	part.vx = (Math.random()*2-1)*10;
	part.vy = (Math.random()*2-1)*10;
	part.onEnterFrame = scatter;
}

function scatter():Void {
	this._x += this.vx *= .9;
	this._y += this.vy *= .9;
	this._xscale = this._yscale *= .9;
	if (this._xscale < 10){
		this.removeMovieClip();
	}
}
</pre>]]>
    </content>
</entry>

</feed> 

