2012.01.11 | 

こんばんはmuchoです。
今日知ったんですが、addFrameScriptなる隠しメソッド?
があるとのこと

public function addFrameScript(frame:uint, notify:Function):void

言語バージョン : ActionScript 3.0
Playerのバージョン : Flash Player 9

指定したフレームにスクリプトを追加します。

こんな技が・・・もしかして使うかも?
ラベルでも飛びたいだろうということでクラスを作ってみました。
AddLabelScript.as



package  
{
	import flash.display.FrameLabel;
	import flash.display.MovieClip;
	import flash.display.Scene;

	public function AddLabelScript(mc:MovieClip, label:*, func:Function = null, arg:Array = null):void
	{
		var frms:Array = [];
		var f:Function;
		if(func != null){
			f = function():void{ func.apply(mc, arg); };
		}

		if (label is Number) {
			frms.push(int(label));
		} else if(label is String) {
			var ss:Array = mc.scenes;
			for each(var s:Scene in ss) {
				var ls:Array = s.labels;
				for each(var l:FrameLabel in ls) {
					if (l.name == label) {
						frms.push(l.frame);
					}
				}
			}
		}

		for (var i:int = 0; i < frms.length; i++ ) {
			var frm = frms[i];
			if (frm > 0 && frm <= mc.totalFrames) {
				mc.addFrameScript(frm, f);
			}
		}
	}
}

使うときは
AddLabelScript(this, "label1", function() {
	trace("label1 is "+ currentFrame);
});
とか
AddLabelScript(mc, this.totalFrames, function() {
	trace("last frame");
	this.stop();
	//ここでのthisはfunctionを埋め込んだmc
});


2012.01.07 | 

This movie requires Flash Player 9

今回はいまさら感たっぷりな話です。おとなしくFROCESSING使えよって話です。
そんな話なんですが、こんばんはmuchoです。
RGBを個別に設定したり、16進数で設定したり、
その逆がしたかったりしたのでColorクラスなんぞ作ってみました。
欲を出してついでにHSVで設定したり、
その逆も出来るようにしてみようとしたら
ちょっとはまりました。
はまったのはHSVからRGBに変換するところです。
(続きを読む...)

2011.12.02 | 

こんばんはmuchoです。
FlashPlayer11が出てから、Stage3Dをあれこれいじってます。
そんなこんなでAway3D4.0でjiglibとBulletの速度比較できるような
サンプルを作ってみたのでレポートをば。

[jiglib]


50個


200個



[bullet]


50個


200個



(続きを読む...)

2011.09.16 | 

こんばんはムーチョ改めジョーになりそうなムーチョです。
残暑の厳しい週でしたがみなさんいかがお過ごしでしょうか?
今日もCinderネタで行こうと思ったのですが、
お仕事中に「あれ?どうやるんだっけ?」となり、
また忘れそうなのでメモ。

Flashでグラデーションマスクをかける方法です。
本来のやり方なら、ActionScriptを使うんですが、


mc.cacheAsBitmap=true;
maskmc.cacheAsBitmap=true;
mc.mask=maskmc;

俺はタイムライン派なんだぜっ!
という兄貴なやり方を。

(続きを読む...)

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を作ろうとするってんでエラーがでます。
その場合は、ちゃんとクラスに定義してあげる必要があります。