Home > action script | works > わかめペン

わかめペン

wakamepen.jpg
注意:描画処理がヘビーなため、高速なPCでないと動きがもたつきます。最悪ブラウザを落とすかもなのでご注意!!

昨日エントリした「なんとなく遊んでしまう」を目指して作ってみました。ステージ上をマウスドラッグでわかめ線が描けます。左上の丸をクリックすると消せます。

あとでソースも公開しますが、しばし手入れします。

1.
ユーザにインタラクションを提供できてなんぼ、みたいなとこはあるのでペンで描画できるようにしました。BitmapData の draw() での描画はフレームレート&処理速度の影響で点々になってしまうので、lineTo で線を描画するようにしました。昨日エントリしたサンプルの色変化効果も適応させました。

wakamepen1.jpg

2.
ちょっと脱線。
まぁもともとはなぎまぐさんのサンプルなのですが、このへんまでいじれば別モノになったかなぁと勝手に判断して、アプリ名(クラス名)を考えます。「DrawAurora.as(ドロゥオーロラ)」とでも命名すると格好イイのでしょうが、僕は迷わず「WakamePen.as(わかめペン)」と命名します。線の太さも 1px と細くすればクールなラインアートっぽくなれそうなのですが、そこも迷わず 5px です。性格上、あんまりクールな感じになると照れてしまいます。サンプルとはいえ、性格って出るもんだなぁと思いました。
まぁこれで「わかめ業界の Flash サイト」制作の際は僕に声がかかると思います(謎)

3.
上の状態で色も変化してるしひと安心と思いきや、なんか違います。ステージ上のオブジェクトが変色していくのはいいのですが、同じタイミングで同じ色に変色しています。これは昨日のサンプルではステージ上のオブジェクトはマウスに吸着している丸一つだけで、その他は draw して生成された「過去の画像」だったのに対し、今回のサンプルは、ステージ上に今まで描画(lineTo)したすべての線が残っていて、そのすべてに同時にフィルタがかかっているせいです。僕はステージで虹色を表現したかったのです。そのためには毎フレーム:

_drawingBoard.graphics.lineStyle(ペンの太さ,ペンの色)
_drawingBoard.graphics.lineTo(mouseX, mouseY);

のペンの色を変化させてやれば良さそうです。レインボー変色したいときは色の色相(Hue:ヒュー)を変化させてやればよくて、同様のことは昨日のサンプルの gskinner さんの ColorMatrix クラスでできるのですが、gskinner さんのは ColorMatrixFilter を使って変色させるサンプルだったので、ちょっと大がかり、というか僕が直観的に使えないのです。
lineTo の色の変更は 0xFF0000 というような16進数で設定すればいいので、いちいち ColorMatrix を使う必要はありません。第一、ColorMatrix の色を都度16進数値に変換&取得する方法がわかりません。目的は「毎フレーム色相の値を回転(値をループ)させ、その時の16進数値を取得し続ける」ことができればいいので、そういうサンプルをネットから探してみる(自分で作れよw)と、英語で世界中から検索したにも関わらず、

fladdict さんの「sketchbook ライブラリColorSB クラス

だけがヒットしました。ライブラリは SVN 管理されているので Ko:ki 様のtortoiseSVN の使い方記事を参考に sketchbook ライブラリをゲットし、ColorSB クラスの中身を拝見すると、

col = new ColorSB(0x00FF00); //適当に初期色。わかめグリーン
col.hue = 0;

と初期化しておいて、あとは毎フレーム

col.hue += 1; //hueプロパティはクラスファイル内で0-360でループする内部処理が施されている
_drawingBoard.graphics.lineStyle(ペンの太さ,uint(col))

してやれば色相をレインボー変色し続けることができる簡単仕様。

ということで、僕が使ったのは sketchbook の機能のほんの一部なのですが、「fladdict さんが作ったライブラリなのだからさぞ超絶なスキルがないと使いこなせないのだろうなぁ。」と身構えている人がおられましたらそれは誤解です。たしかにクラスファイルでは僕の知らないような内部処理がスマートに実装されてますが、ライブラリを使う分にはそこを解読する必要はなくて、ドキュメントやクラス内のコメントを参考に気軽に使わせていただくだけなのです。(まぁ結局クラス内が気になりだすのですが、それはまた時間ができた時にでも。。)
ということで、ペン先を変色させ続けるようにできました。

wakamepen2.jpg

4.
lineTo を使うお絵かきツールを作る上では欠かせない Tips だと思うのですが、lineTo で描画した線は、ステージ上に増えれば増えるほど、再生パフォーマンスは落ちていきます。対応策としてはどこかのタイミングで lineTo しているすべてを BitmapData として drawして(キャプチャ)、同じ位置に貼り付けた後、lineTo を clear してやるといいです。
今回はユーザーがラインを1本書き終えた(マウスアップ)タイミングでキャプチャしています。これは過去 AS2 で作ったことがあるので簡単でした。

trick7.com blog: Flashで筆順再生2:色とブラシサイズ」ソースはこっち

5.
左上の消去ボタンをクリックするといい感じに消えていきますが、実は4で作ったBitmapDataをクリアするだけで勝手にああいう感じになりました。ラッキー。でもこれ「超絶技巧発表会」の munegon さんのプレゼン資料と同じ効果ですよね。。かぶってすいません。
ところでビットマップデータをクリア(全部透明に戻す)する時って

_drawingStockBMD.fillRect(new Rectangle(0,0,stage.stageWidth, stage.stageHeight),0x000000);

するのがベストですかね?
draw() で消せるかと思ったら、上書きされるだけだったのでちょっとハマった。前にもハマってた。
trick7.com blog: bitmapData.draw(mc); を連続して実行すると

6.
で一応できたかなと思ってサーバにアップしたらもたつく。。ローカルでは普通に動いてたスペックのマシンでもブラウザで見るともたつくんですね。Core2Duo の 2GHz オーバーのマシンでやっとという感じ。
おそらく ステージ全体に対して perlinNoise でもやもや画像を生成&アニメーションさせ続けている部分が重たそうなので、ステージサイズを縮小すればマシになるのだろうけど、このステージサイズで気持ち良くなるように作ったので変えたくない。
perlinNoise ビットマップ画像を半分のサイズで作って Matrix で2倍に拡大するのも考えたけど、今までの実装上、ペンツールとの兼ね合いで頭がこんがらがりそうなのでちょっと躊躇中。

7.
作っててテンション上がったので、僕も「noughts::」さんや「黒板.in(大ヒットにつき管理運営が大変そうですね!)」さんみたいなものを作りたい。PHP 勉強する!(何度目の宣言だw)

以上、現時点でこんな状態。長々と解説してるよりソース出せという感じでしょうが、いつものように天真爛漫なコードを書いてしまったので清書してからということでお待ちくださいませ。

追記:
3の段階で FlashDevelop プロジェクト外のディレクトリにクラスパスを通した(プロジェクトエクスプローラーウィンドウのプロジェクトディレクトリ右クリックで propaties >ClassPaths から設定)のだけど通らない。import 補完で候補として表示はされるのだけど、パブリッシュ時に怒られる。結局同階層ディレクトリに sketchbook ディレクトリを持ってきて対応したのだけど、なぜクラスパス通ってないのでしょう!?

自己解決:
FlashDevelop 側はクラスパス通してたけど、僕は F6 キーで Flash IDE からパブリッシュするようにしていて、Flash 側でクラスパス設定してなかった。svn用フォルダを新規に作ったので忘れてた。アホや。

Comment:4

なぎまぐ 2008-03-27 (木) 15:24

キャー!サンプルいじってもらってありがとうございます!
google analyticsみてたら、
yahooあたりからリンクされたんじゃねーのか!て思ったw
trick7すげー。

tera 2008-03-27 (木) 15:36

>なぎまぐさん
サンプルをいじった側がお礼を言われるのは不思議ですがw
素敵なソースありがとうございましたー。今後も待ってます!

kawa-kitty 2008-03-30 (日) 14:01

これはたまりませんな!
ついつい描きつづけてしまいましたわ

tera 2008-04-02 (水) 01:37

>kawa-kitty様
コメントありがとうございます。
「ついつい」と仰っていただけると嬉しいです。

Comment Form

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

Remember personal info

Trackback:0

TrackBack URL for this entry
http://www.trick7.com/blog/mt-tb.cgi/715
Listed below are links to weblogs that reference
わかめペン from trick7.com blog

Home > action script | works > わかめペン

持っている 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