着色してみる

最近の学習状況

ActionScript 3.0 アニメーション: Keith Peters, 永井 勝則」をざっくり読んだ。なかなかの良書。
 タイムラインを使わずに、数式でもって動かそうというときに必須のテクニックの集大成。
 個人的にはBASIC時代にやったことのある内容ではあったが、またやれという時に意外に手間取ってしまう部分だと思う。
 あんまりActionScript特有の機能を駆使していない汎用的な内容であるのが、欠点であるし美点でもある。
 この本のスクリプトをベースに自分なりにライブラリを作っておけば、かなり便利なものができると思う。

 最近、漫画の持つUIに対する非常に強い興味が再燃してきたので、Flashを使って漫画の考察が行っていけないものかと考えている。
 フキダシの他にもベタフラ、コマなどのコンポーネントとか作りたいもんだ。

 さて、そんなこんなで今回は、スクリプトでかけられるビジュアルエフェクトをやっていく。

FlashCS3の画にかけられるエフェクト

 非常に分かりにくいのだが、ムービークリップにはインスタンスごとに様々なエフェクトをかけることができる。
 まずプロパティを見ると、カラーとブレンドというオプションが見つかる。さらにフィルタというパネルもあって、そこでもエフェクトがかけられる。
 …ひとつにまとめてほしい。

 このへんの機能は非常にバランスの良い名バージョンとの呼び名も高いFlash8から導入されているらしい。
 名バージョンと呼ばれるソフトって実はそんなに良い訳でもなくって、次のバージョンが酷かったというのとほぼイコールなんですよね。
 次のバージョンというのは勿論我らがFlash CS3さんです、とほほー。

 で、Flash8に関しては「にゃあプロジェクト - ウェブログ - 関連記事 : flash (まとめ)」で詳しい解説があるので、とりあえずそれを参考にAS3でやってみることにする。

エフェクト用オブジェクトを作る

 前述の「ActionScript 3.0 アニメーション」を参考にしつつ、エフェクトをかけるためのオブジェクトを作っておく。
 作ったオブジェクトは、[環境設定...]-[ActionScript]-[ActionScript3.0設定]でクラスパスを通した場所に置く。ターゲットアイコンで指定できる。
 パスを通したフォルダのしたに"jp"フォルダ、更にその下に"tonbi"フォルダを作り、そこに"Ball.as"というファイル名で以下の内容を書いたasファイルを置いた。
 ちなみに、"jp.tonbi"という名前のフォルダでもパスは通る。しかし"jp"ドメインのクラスが沢山公開されると思うので(…といいなぁと思うので)、ちゃんとフォルダを作っておいたよ。

package jp.tonbi
{
import flash.display.Sprite;
import flash.display.Graphics;

/*
 * 円を描いて置いておくオブジェクト
 */
public class Ball extends Sprite
{
	private var __radius:Number;
	private var __color:uint;
	
	function Ball(  radius:Number = 20, color:uint = 0x999999 ) 
	{
		__radius = radius;
		__color = color;
		init();
	}

	function init() {
		var g:Graphics = graphics;
		g.beginFill( __color );
		g.drawCircle( 0, 0, __radius );
		g.endFill();
	}
}
}

 このクラスは円を描くだけのシンプルなもの。たぶん、普通のひとの感覚では○描くだけで、なんでこんなに行数がいるのか不思議だと思う。
 私も「○描け」で終わりでいーじゃん。と思うんだが、今の「ぷろぐらむ」というやつは泥臭くて、こんな色々やんなきゃいけないのだ…とほほ。
 デフォルト値が今ひとつ使いやすいように決められてないんだよなー。センスよくない。当たり前と思っていたHyperCardのセンスの良さは異常だったのかー!!

カラー

 さて、オーサリングではインスタンスのプロパティパネルにあるカラーオプションで[詳細]を選択し、その隣りにある[設定...]ボタンを押すことでムービークリップに着色(tint)できる。
 ActionScript 2.0 からの移行を見ると、ColorTransform を使えば実現できるからAS2のColorオブジェクトは廃止だそーな。
 …あっそ。

 Σc ' _' )  < たろー
 $ σ_σ$  < ろーぜん

 ローゼン麻生は、ちょっとタイミングを逸したね。

 しかし、スクリプトで廃止するならオーサリングの方でも廃止にすれば良いのに!分かりにくいんだよっ!
 ちなみに、オーサリングの方では[フィルタ]パネルで[カラー調整]を追加することでColorTransformは実現できる。

 あと、ややこしい話だが、ActionScript3.0ではColorTransformの子にColorというオブジェクトがあって、これはActionScript2.0のColorオブジェクトとは別物。
 ColorTransformとは別のパラメータでムービークリップの色を変える。

カラーコンタクト

 てなわけで、着色するのを作ってみた。しかしこのスライダはドラッグしづらいなー。未だにAdobeのFlash班にはまともなインタフェースデザイナーがいないな。

 そしてこのswfでは最初に作ったBallオブジェクト使ってない…。

 Σc ' _' )  < アホだな
 $ σ_σ$  < 計画性皆無の甲斐性なしの、将来性絶無ね

 ひどいっ。このガキども酷いよ。
 スクリプトは次のような感じ。

import fl.controls.Slider;
import fl.events.SliderEvent;
import flash.geom.ColorTransform;

redSlider.addEventListener( SliderEvent.CHANGE, changeHandler );
greenSlider.addEventListener( SliderEvent.CHANGE, changeHandler );
blueSlider.addEventListener( SliderEvent.CHANGE, changeHandler );

function changeHandler( e:SliderEvent ) {
	var ctf:ColorTransform = new ColorTransform();
	ctf.redOffset = redSlider.value;
	ctf.greenOffset = greenSlider.value;
	ctf.blueOffset = blueSlider.value;
	
	leftEye.transform.colorTransform =
	rightEye.transform.colorTransform = ctf;
}
 Σc ' _' )  < zipでクレ
 $ σ_σ$  < zipであげなさい

 てなわけで、flaファイルも置いときます。
sample.fla.zip

 今日はここまで。


2008-06-20