2009年2月アーカイブ

先日のエントリーでフレームを進めるとblendShaderのブレンドが効かなかった件ですが、なんとなんと!コメント欄にて解決方法をお教えいただきました。

感謝感謝です。おかげで胸のつっかえが取れました!

以下の様にどうやら一旦ブレンドモードをノーマルに戻してから再設定しなければならない様です。

~
addEventListener(Event.ENTER_FRAME,enterFrameHandler);            
~
private function enterFrameHandler(e:Event):void{
    _param++;
    if (_param > 10){
        _param = 0;
    }
    _fadeShader.data.intencity.value = [_param * 0.1];
    //一旦ブレンドモードをノーマルにする!!コレ重要!
    _container2.blendMode = BlendMode.NORMAL;
    _container2.blendShader = _fadeShader;
}

以下修正後の動作。動いてる!!よかった。。。。


本当にブログを書いていて良かったと思いました。
たまち様>解決法をお教えいただき本当にありがとうございました。


そこで新たな疑問が!何故ブレンドモードをノーマルに戻す必要があるのでしょうか???こういう仕様なんでしょうかね?

Adobe Maxのレポートでもちらっと触れましたが、Progressionの拡張機能コンテスト開催が正式に告知されました。


extends Progression 拡張機能コンテスト

用意されている商品がとても豪華で。。。凄いです。

私のレベルだとなかなか難しい面もあるとは思いますが、もちろん参加させていただく予定でおります。

また、このブログでも拡張機能の作成方法等コンテストに役立つ情報を随時掲載予定です。

何を作ったら良いか分からないという方も、
とりあえずは簡単なカスタムコマンドから始められるとよいのではないでしょうか?

私はコンテスト以前に作ったカスタムコマンドは随時放出していく予定です。
wonderflにも少しあるので見てみてくださいね。
ちなみにnium先生に手伝ってもらったループコマンドはなかなか使えます。
これ外出しておかないとな。。。。

勉強会も開催されるとの事ですが、もう定員になっちゃってるのかな?もしかしたら枠が増える可能性もあるので、補欠登録しておくと良いでしょう。

アイデアだけは凄く沢山あるのですが、実装出来ないというジレンマを抱えておりますので、アイデアも放出するかもしれませんw

みんなで応募してコンテストを盛り上げましょう!!

こんにちは!
忙しくて目も当てられませんね!びっくりです!

そんな中またProgressionのお世話になるためにプロジェクトを作成しようとしたところ、ちょっとしたミスをしてしまいました。
プロジェクト名が自動的にパッケージ名に入る事を忘れており、
パッケージ名に不正文字を使用してしまったのです。

事の顛末は以下フォーラムに報告してあります。
http://forum.progression.jp/index.php?topic=71.0


既にバグフィックスとなるパッチが公開されています(早い!!)
以下よりダウンロードして下さい。
http://progression.jp/ja/download/3.1.42/#item-patch
Progression3.1.42使用されているみなさんはパッチをあてるか、十分に注意しましょう!

仕事の忙しいのは続いているのですが、合間を見てPixelBenderの勉強を今更ながらじわじわと始めています。
何故かと言うと、実は画像の処理がよくわかっておらず、PixelBenderのソースコードを見てこれならいけるんじゃなかろうかと。
また、先日行ったAdobeMaxでもFITCの人がPixelBender速いぜ!みたいな事を言っておられましたので、少しやってみようかなと。

まず、導入の仕方やチュートリアルは以下の記事を参考にしました。
Adobe Pixel Benderでのブレンド、フィルタおよび塗りの作成

この記事だけでも十分にわかりやすいのですが、
AdobeのウェブサイトにPixel Bender ExchangeというPixcelBenderファイルの公開サイトがあります。
(実は私の欲しかったものはここでまかなえてしまったのですが。。)

このファイルを見て、PixelBenderToolkitのヘルプを見て、という感じで進めていきました。ただ、実際にFlashで適用させるにはFlash10で書き出さなければならない。。。でもCS4持ってない。。ということでWonderflを利用させてもらっているのですが、思いっきりはまってしまいました。

まずShaderをフィルタとして使用する場合は何の問題も無くFlash側で使用出来ました。

思うような動作を実現できなかったのが、blendShaderにShaderを設定する場合です。
2つの画像を使用する場合はblendShaderでブレンドするという形になります。
やりたかったのは2つの画像のクロスフェードだったのですが、一番最初のフレームで最後に設定した後、フレームを進めてblendShaderにShaderを設定しても反映されませんでした。
(サンプルはコマンドになってますが、EnterFrameで散々いろいろやったあげくの悪あがきです)

ようするに以下のように書いた場合は

_fadeShader = new Shader(_pbloader.data);
_fadeShader.data.intencity.value = [0.3];
_container2.blendShader = _fadeShader;
//以下が適用される
_fadeShader.data.intencity.value = [0.5];
_container2.blendShader = _fadeShader;

後ろのintencityが0.5が適用されて、

~
_fadeShader.data.intencity.value = [0.5];
_container2.blendShader = _fadeShader;
addEventListener(Event.ENTER_FRAME,enterFrameHandler);
}
private function enterFrameHandler(e:Event):void{
    //こちらは反映されない
    _fadeShader.data.intencity.value = [0.3];
    _container2.blendShader = _fadeShader;
}
とした場合は最初に設定したintencityが0.5が適用されます。


ちなみに後者のPixcelBenderソースコード貼っておきます。


kernel CrossFade
<   namespace : "northprint";
    vendor : "";
    version : 1;
    description : "CrossFade";
>
{
    input image4 src;
    input image4 src2;
    output pixel4 dst;
    parameter float intencity
    <
        minValue:0.0;
        maxValue:1.0;
        defaultValue:0.5;
    >;  
    void
    evaluatePixel()
    {
        float4 frontPixcel = sampleNearest(src,outCoord());
        float4 backPixcel = sampleNearest(src2,outCoord());        
        dst = mix(frontPixcel,backPixcel,intencity);
    }
}

これだけで画像のミックスが出来ちゃう。
これが動的に変えられないのは悲しいです。(そもそもこういう事を意図されていないのかもしれませんが。。描画が更新されていないだけ???)
まだよく分かっていないながら使っているので、もう少しがんばってみようと思います。間違ってるよ!という場合は指摘いただけると泣いて喜びます。

こんにちは!
現在酷く忙しい日々が続いておりまして。。
気分転換にflabakaさんのエントリを利用させてもらって一つぱぱっと作ってみました。。。

それではどうぞ!

本当は2時間以内に作成したかったのですが、XMLの作成に非常に時間を取られてしまいました。
しかもパフォーマンス悪いし。。
文字が止まる事ありますが、待ってると動き始めますのでその辺ご了承下さい。

今回特筆すべき点は。。。
強いて言えばここかな?と
IndexScene.as内でマウスクリックのイベントハンドラで、次のシーンへ飛ばしてる部分です。

private function clickHandler(e:MouseEvent):void {
	if (isCurrent) {
		progression.goto(scenes[0].sceneId);
	} else {				
		if (progression.current.next!=null){
			progression.goto(progression.current.next.sceneId);
		} else {
			progression.goto(progression.firstSceneId);
		}
	}
}

Progressionインスタンスのcurrentプロパティで現在のシーンの参照が取れるので、そのnextプロパティで次のシーンへ飛ばしています。
無かったらIndexに戻しています。

あと自作コマンドも入ってますが、汎用性ほとんど無しです。
いやー今見返してみると酷いソースコードだ。。。

プロジェクトファイル一式はここにおいておきます。

2/9 12:00追記
flabakaさんのレポートに載っていない件があるのを忘れておりました。
Progressionの拡張機能コンテスト開催の件です。
詳細は後ほど様々な場所から発信されると思いますが、2月中旬~下旬くらいに発表になるとの事でした。
私は現在、拡張機能コンテストに参加出来る状況にあるとは言えない状況ですが、なにかしら出せたら。。。と思っています。
みなさんも今からネタを考えておくと良いと思いますよ!みんなでコンテストを盛り上げましょう!!

先日ADOBE MAX 2009が開催され、私も参加してまいりました。
レポートを書かなければ!!と思っていたもののずるずるとこんな日付に。。。
色々考えているので、たぶん皆が忘れた頃に投下する予定です。

そこでMAX会場にてとある人からProgressionのコマンドだけ使いたいんだけどどーすんの?的な事を聞かれましたのでやり方を書いておきます。

まず、なんでも良いのでProgressionプロジェクトを書き出します。
(私はFlash CS3なのでswc書き出しが出来ません。なので今回は通常プロジェクト書き出しの場合ですあしからず。)

それで書き出されたlibsフォルダを以下の図の様に設置します。
今回構成はこんな感じで簡潔にしてあります。
090205_1.jpg

パブリッシュ設定のActionScript設定でクラスパスを設定します。
090205_2.jpg

これで準備完了。

以下ドキュメントクラスです。
commandsのパッケージをインポートするだけ。

package {
	import flash.display.Sprite;
	import jp.progression.commands.*;
	import jp.progression.core.commands.*;
	public class Main extends Sprite {
		public function Main() {
			var rectObj:Sprite = new Sprite();
			//シリアルリストインスタンス作成
			var sList:SerialList = new SerialList();
			//矩形の作成
			rectObj.graphics.beginFill(0x000000);
			rectObj.graphics.drawRect(0, 0, 200, 200);
			rectObj.graphics.endFill();
			//コマンド登録
			sList.addCommand(
				new AddChild(this, rectObj),
				new DoTweener(rectObj, { x:100, y: 100, time:2 } ),
				new DoTweener(rectObj, { scaleX:2, scaleY:2, time:2 } ),
				new DoTweener(rectObj, { x:50, y: 200, scaleX:1, scaleY:1, time:2 } ),
				new DoTweener(rectObj, { x:500, time:2 } )
			);
			//コマンド実行
			sList.execute();
		}	
	}
}

wonderflではコマンドしか使えないのでコマンドだけ使ったサンプルを投稿しています。
こちらも参考にしてくださいね。(最近全然投稿してないんですが。。)

サンプルはこちらに置いておきます。

Progressionのクラスベースは敷居が高い!と思われている方もまずはコマンドから始めてみませんか?

このアーカイブについて

このページには、2009年2月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2009年1月です。

次のアーカイブは2009年3月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。