2011.12.20 | 

やぁやぁ、kaminayです。だいぶ久しぶりの投稿になってしまった。
自分的にも、DevJamMemo的にも。

そんな久しぶりのmemoはハマったのでメモでした(汗

as3で透過(alpha)付きのマスクのやり方は
いろんなブログ(muchoも書いてたような・・・)や、
adobeのマニュアルにもあるので説明は不要だと思いますが、

maskをかける方、かけられる方の
両方のDisplayObjectのcacheAsBitmapを有効にするだけです。


/*
var view:DisplayObject;
var mask:DisplayObject;
*/
view.cacheAsBitmap = mask.cacheAsBitmap = true;
view.mask = mask;

今回、いつものやり方ではうまく動かない事例を発見しました。
多分、バグではないかと思うんだけど、どうだろう。。

ダメだったのはこんな時でした。


/*
var view:DisplayObject;
var mask:shape;
var bitmapData:BitmapData;
*/
view.cacheAsBitmap = mask.cacheAsBitmap = true;
view.mask = mask;
mask.graphics.beginBitmapFill(bitmapData);
mask.graphics.drawRect(0, 0, bitmapData.width, bitmapData.height);

addEventListener(Event.ENTER_FRAME, function(e:Event):void{
	//bitmapDataをいじいじ
});

つまり、graphics.beginBitmapFill()であてた
bitmapDataをmaskの範囲として使う場合です。

cacheAsBitmapでキャッシュされているデータの更新は
DisplayObjectのviewに関する情報の更新を検知して行っていると思うので、
そのチェックするリストにgraphics.beginBitmapFill()であてた
bitmapDataが入ってないんだと思います。

bitmapDataを使いたいなら、Bitmap使えばいいじゃんという話ですが、
※Bitmapの場合は透過付きマスクは先の方法で適応できます。

今、bitmapDataをいじいじするクラスを書いていて、
bitmapDataの参照を他に渡してしまうと、
外からでdisposeをされて動かなくなるとか、
逆に外で使ってるのにdisposeしちゃうとか、
bitmapDataの管理が面倒になると思ったので、
マスターのbitmapDataをクラスで持って、
graphicsを引数でとって、それにdrawRectしてあげるメソッドを用意するという方法をとっていました。
とてもニッチなケースですね(汗

途中までいい具合だったんですが、
maskとして使ってみようかな?と軽い気持ちでいたら急にハマりました。

対処方法は
graphicsに再度drawRectしてあげると更新されます。
まぁ当り前ですね。

他にも方法がありそうなんですが、
scaleを変えてみたりとか色々試しましたが、結局drawRectで落ち着きました。

PS
せっかくマスク効くようになったけど、
拡大しながら使っていたので、
画質的にイマイチという結果に(汗

2011.10.05 | 

どうも、kaminalyです。まだ生きていますよ。

Adobe MAX 2011 in Los Angeles なタイミングで公開されたflashplayer11ですが、
windowsとmacで全然パフォーマンスが違ってアレ?っとなった話です。

あ、flashplayer11のダウンロードがまだの方はこちら
http://get.adobe.com/jp/flashplayer/

開発者用のdebug playerはこちら
http://www.adobe.com/support/flashplayer/downloads.html

(続きを読む...)

2011.08.29 | 

やぁ、どうも。kaminalyです。
Flashの設定について、今日気がついた事があったのでメモメモ

Flashのパブリッシュ設定→スクリプト(ActionScript 3.0)設定にある、
ステージのインスタンスを自動宣言のチェックについて。

以前は、チェックした場合、
たとえばHogeクラスをリンケージで関連付けたムービークリップの中のオブジェクトに名前をつけると、
自動宣言してくれるので、定義をしなくてもコード内で急に使えて、
逆に、定義していないと気持ち悪いと思って定義すると、コンクリフトエラーが出ました。
しかし、CS5の環境ではどうやら改善されているようです。
定義しても、コンクリフトエラーが出なくなっていました。


package
{
	import flash.display.Sprite;

	/**
	 * ...
	 * @author kaminaly at SHIFTBRAIN
	 */
	public class Hoge extends Sprite
	{
		//ムービークリップないのオブジェクトにfugaと名前を付けた場合
		//public var fuga:Sprite;//定義してもコンクリフトエラーにならなくなった。

		//連番で名前をつけたい時、自動宣言しない場合すべて定義が必要だけど、
		//public var fuga_0:Sprite;
		//public var fuga_1:Sprite;
		//public var fuga_2:Sprite;
		//public var fuga_3:Sprite;
		//public var fuga_4:Sprite;
		//非常に面倒。
		//同じ機能なのに、連番オブジェクトの数が違うHogeが複数必要だったりすると
		//Fugaもクラス化してループで生成するとか、手間が増える。
		//自動宣言だと定義しなくてOKなので、かなり楽。
		//定義していない変数が急に使えるのは気持ち悪かったり、
		//補完が効かないのは変わらないけど、ササっと片付けたい作業の場合はかなり有効。

		public function Hoge()
		{
			//定義しなくてもfugaにアクセスできる。
			fuga.alpha = 0.5;

			//補完とか効かせたい場合は、
			//public var _fuga:Sprite; とか別の名前で定義して
			//_fuga = Sprite(getChildByName("fuga"));
			//とかで対応してたけど。ムダが多かった。
			//今は必要な分だけ、定義してあげれば良い。
		}
	}
}

クラスベースで作っている人にとっては、チェックを外して作る方が自然だったけど、
Flashで素材をあらかじめ用意して作りたい場合チェックを入れていた方が楽なので
お手軽に制作時間の削減が出来る。もちろんケースバイケースですが。

前はチェック外して作業してたけど、今はチェック入れた方が良くなってた。
が、一つ注意点があります。
Loaderなどで外部swfを読み込む場合、読み込まれるswfにリンケージ素材があり、
読み込む側でも、そのクラスを知っている(読み込んでいる)と、
ApplicationDomainを指定しない限り読み込む側のクラスが主なので、
読み込む側では定義がないのに、読み込んだ側が勝手にfugaを作ろうとするってんでエラーがでます。
その場合は、ちゃんとクラスに定義してあげる必要があります。

2011.08.23 | 

どうも、kaminalyです。
以前に振り子の不思議を表現しようと思って、
振り子のやつを作ってみた編」というメモを書いたのですが、
不完全のままフォウチプレイを楽しませていただいていました。

そんな事も忘れていたのですが、
今日vimeoをふらふらしていた時にたまたま見つけた空飛ぶスパゲッティモンスター教信者のmemoさんの動画を見て、
その理由がわかったかもなのでリベンジすることにした。

(続きを読む...)

2011.08.17 | 

こんにちは。お盆休んだのに逆に体力を消耗したkaminalyです。
今日はとてもライトなメモです。

今、開発チームでは、Cinderを使ったインタラクションを実験的に作って遊んだりしているんですが、
Cinderの用途は、ちょっとしたインタラクションとか、VJ素材とかに使っている人が多いのかなと思います。
それは、OpenFrameworksとかProcessingも同じだと思うんです。
Flashでは負荷が高すぎるような表現も可能なので、そういう部分が守備範囲なんだと思います。
Flashで出来る事であれば、Flashでやった方が楽な事が多いからね。(Flashに慣れ親しんでいる、わたくしの主観です(汗))

逆にFlashは高レベルに抽象化されているので、フルFlashなサイト(アプリ)はCinderに比べれば制作は楽だと思います。
つまり、フルFlashなサイト(アプリ)的なものをCinderで作る事例ってあんまりないと思うんです。
(わたくしもiPhoneアプリをCinderで作りましたが、とてもシンプルなものでした。)

そんななか、Vimeoをチラ見してた時に、Cinderで作られたフルFlashなサイト(アプリ)的なものを見つけたので貼り付けておきます。

同じアプリの別動画をいくつかあげている人がいたので、こちらも
http://vimeo.com/sayinghai

キャプションによると、制作期間は1ヵ月位のようなので、
もっとCinder(C++)のジョブレベルが上がれば、Cinderでアプリもありだなぁと思いました。
もちろん、イベントとか展示用ね。