Home > action script > 反射表現クラス:com.trick7.effects.Reflection.as

反射表現クラス:com.trick7.effects.Reflection.as

trickReflection1.jpg

昨日の記事の手法をベースに、床面に対して鏡面反射表現ができるクラス、Reflection.as を作り直しました。

まず、Flashで反射表現を実現させるために、3つのアプローチがありました。

  1. 反射部分を透明度で表現する
    一番最初に思いついた方法です。もとの画像を反転コピーして、グラデーション画像と copyChannel 合成して、画像のアルファを100から0にフェードアウトする手法。しかし、反射したオブジェクト同士が重なった時に、後ろ側の反射が透けるのは不自然なので却下
  2. "Active Blur" を使って表現する
    透明度表現で行き詰まった時に、muta様にご提供いただいたアイデア。反射部分は同様にフェードアウトで表現しますが、その透明レイヤーの下に、床面の画像を敷くことで、透過を防げます。
    Active Blurを使って、床面となる背景画像をキャプチャし、エフェクトをかけるMCの座標に応じて、キャプチャ画像を毎フレーム位置補正して、反射部分の下地にします。メリットとしては、背景(床)が画像でも対応できる点。その際、onEnterFrameを使えば、毎フレーム、ダイナミックに反射を描画できます。
    ただ、背景となるムービークリップ全体をキャプチャするため、再描画領域が大きくなってしまうのと、Sandy で distort させる時に指定する頂点座標の取得が難しくって、今回作りたい表現にはオーバースペックだったので、このアプローチは選びませんでした。
  3. 反射部分に透明→背景色の矩形をかぶせる
    もとの画像を反転コピー。その上にアルファ0→100(背景色)の矩形を重ねる手法。反転画像自体は不透明なので、下地が透ける問題はなし。使用状況が、背景が単色ベタ塗りの場合に限定されてしまいますが、処理の軽さとコントロールのしやすさを考慮して、今回はこのアプローチに決定しました。

3のアプローチで制作したのが、今回の Reflection.as です。コードの内容はダウンロードファイルを見ていただければ理解できると思います。

reflectionNoTransparent.zip(145KB): flash8形式

  1. コンストラクタ関数の引数として、反射させたいMCのインスタンス名, 反射の度合い, 背景色(※オプション:未指定の場合は 0x000000)の3引数を受け取る。
  2. MCの反転画像を bitmapData に draw する。
  3. 上に被せるグラデーション画像をコードから生成。先程の bitmapData に上書きdraw すると、前回のエントリのように、フェードアウトを擬似的に表現できる。
  4. それを新規ムービークリップ "reflection" に attachBitmap し、reflection を元画像の下端に移動して完成。

fla ファイル側の設定ですが、一番簡単な設定は、ステージ上にムービークリップを配置して、

import com.trick7.effects.Reflection; //クラスをimport
var ref:Reflection = new Reflection(mc, 2.5); //引数は、( インスタンス名, 反射画像の高さ, 背景色 )
以上で、背景色が黒の場合の反射表現の出来上がりです。

エントリのトップ画像の場合は、ステージ上にインスタンス名 "paint(ごにゃごにゃしたMC)" を追加で配置し、

import com.trick7.effects.Reflection;
var ref:Reflection = new Reflection(mc, 2.5);
var ref2:Reflection = new Reflection(paint, 3);
となります。反射画像の高さは、元画像の高さを、第2引数で割った値となるので、元画像が150pxの時、最大値の1なら、150pxの反射画像、逆に5ぐらいにすると30pxの反射になります。これによって再描画領域をぎりぎりまで狭めることができました。

また、反射画像の高さと背景色は個別に設定できるので、背景が透明な場合、

import com.trick7.effects.Reflection;
var ref:Reflection = new Reflection(mc, 2.5, 0xff0000);
var ref2:Reflection = new Reflection(paint, 3, 0x00ffff);
で、次のような画像になります。まぁこういう使い方はしないでしょうけど。
trickReflection1.jpg

バグがあったらおもさげながんす

Comment:1

a 2008-07-16 (水) 01:37

本当に勉強になりましたw
ありがとうございます!!

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Remember personal info

Trackback:0

TrackBack URL for this entry
http://www.trick7.com/blog/mt-tb.cgi/469
Listed below are links to weblogs that reference
反射表現クラス:com.trick7.effects.Reflection.as from trick7.com blog

Home > action script > 反射表現クラス:com.trick7.effects.Reflection.as

持っている Flash & ActionScript 関連本の中から、自分的おすすめの読む順番をご紹介。各書籍のレビューは books カテゴリからご覧頂けます。
この順番でどう?(AS3.0)
  • Adobe Flash CS3 詳細! ActionScript 3.0 入門ノート (DVD付)
    Adobe Flash CS3 詳細! ActionScript 3.0 入門ノート (DVD付)

    デザイン方面からFlashデビューして、そのままAS2.0を使うようになった人が、難しいと評判のAS3デビューする時の最初の1冊として、とにかく目を通しておくと良いかと思います。プログラミング経験の少ない方でも、サンプルをじっくり読めば、ゼロからのAS3デビュー可。
  • ActionScript 3.0 アニメーション
    ActionScript 3.0 アニメーション
    洋書「Making Things Move!」の日本語訳本。ActionScript3.0で数学的アニメーションを作ることがメインテーマなのですが、前半部分でAS3.0の基礎を分かり易く解説されています。後半の重力, IK, 3D表現等のアニメーション解説も楽しい。僕はこれのAS2.0洋書版を読んでFlashの面白さに気付きました。
  • Essential ActionScript 3.0 (Essential)
    Essential ActionScript 3.0 (Essential)

    900ページ以上ある相当分厚い本。基礎からOOPまでを解説。ほぼ網羅しているので、これを抑えておけばAS3博士になれそう。
  • Actionscript 3.0 Cookbook
    Actionscript 3.0 Cookbook

    ActionScript3.0のリファレンス本。問題とその解決法が1ページぐらいで細分化されているので空いた時間にちょっとずつ読み進められる。WebでAS3のソースを見て勉強する時の字引としても使う。ただ、時期的に初期の本なので、AS3自体が仕様変更してたりするので正誤表は必読。
  • Object-Oriented Actionscript 3.0
    Object-Oriented Actionscript 3.0

    7/23に発売されたFlash&OOP本。AS2.0版は持っているのだけど、オブジェクト指向の初歩的な解説から入って、後半は僕の理解を超える難度になっていきました。今度こそ理解できるか?
この順番でどう?(AS2.0)
  • Foundation Actionscript Animation: Making Things Move (Foundation)
    Foundation Actionscript Animation: Making Things Move (Foundation)

    スクリプトでアニメーションさせる方法を学べる。プログラムの知識というよりも数学や物理の知識が必要。バネの表現や3D表現など、汎用性の高いテクニックを身に付けられ、個人の表現力をレベルアップするのに最適。参考までに、僕が調べた英単語リスト。2007年4月に、AS3対応版も発売されました。
  • ゲーム開発のための数学・物理学入門 Beginning Math and Physics for Game Programmers
    ゲーム開発のための数学・物理学入門  Beginning Math and Physics for Game Programmers

    「Making Things Move!」の世界を突き詰めたい人用のステップアップのための本。行列や物理運動、2D/3D表現。Flashの本ではなく、じっくり読むタイプの本なので、あとまわしにしてもいいかも。
  • Flash 8 Essentials
    Flash 8 Essentials

    Flash8の新機能を紹介。全10章が独立した構成で、興味のある部分から読めます。フィルタやビットマップ、ビデオの使い方とかを、基礎から順を追って理解していけるので、ゼロからスクリプティングできるようになる。僕はビットマップ関連の作業の際のリファレンスとして常用しています。
  • .fla―Idea of Flash Creation
    .fla―Idea of Flash Creation

    上の本でFlash8の基本を身に付けて、それをどう面白い表現に落とし込むかを学べます。深津さんの、試行錯誤・実験しやすいスクリプティング、クラス設計に凄さを感じました。YouTubeやFlickrのAPI、PHPとの連携記事も。
  • FLASH ActionScript 2.0入門完全ガイド+実践サンプル集 [CD-ROM付]
    FLASH ActionScript 2.0入門完全ガイド+実践サンプル集 [CD-ROM付]

    ここまでで表現力が付き、テンションが上がるので、その勢いで難解なオブジェクト指向に挑戦。プログラム経験のない人がいきなり英語のOOP本を読むのは厳しい。この本で継承とかインターフェースとかポリモーフィズムとかの用語を理解しておくといいかも。
  • オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―
    オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―

    Flashの本ではありませんが、OOPの概念を気軽に読めるボリュームで解説してくれます。英語と日本語のOOP用語の対応を図るためにも「Object-oriented Actionscript for Flash 8」と併読するのがおすすめ。なんとなく読んでおくだけでも結構違うのでは。
  • Object-oriented Actionscript for Flash 8
    Object-oriented Actionscript for Flash 8

    前半はOOPの利便性や基本の紹介。デザインパターンやMVCの理解。13章からグッと難しくなって大変。Flash8対応。
  • Essential Actionscript 2.0
    Essential Actionscript 2.0

    上の本よりもさらにOOPプログラマ向け。同じOOP本ということでやや重複しており、こちらはMX2004時代の本なので見送ってもいいかも。分かりやすい英語で良著。この本のAS3版が出たら間違いなく買い。

Page Top