僕はProgression3からPRMLLoaderを使ってシーン構成を生成することが多いいのですが、Progression4になって仕様が変わり、こちらのブログを参考にさせて頂いて使っていたのですが、Public Beta 1.3になってどうもディープリンクが上手く作動していないことに気付く。Public Beta 1.2までは大丈夫だったとにと思い、twitterでつぶやいてみると、nium先生からご教示が!! 結論から言うと、PRMLLoaderには、autoGotoというプロパティーがあって、デフォルトでtrueとなっているので、PRMLLoaderで読んだprml.xmlに自動的に移動する→そのあとディープリンクのシーンに移動するという処理になるようで、IndexSceneのatSceneDescend()を通らずに、自動遷移するatSceneInit()を通るとのこと。今までの認識で書いて2重に書いていたみたい。 _prml.autoGoto = false; としたら無事直りました。nium先生ありがとうございます。 とりいそぎcreateFromXMLを使ってシーン構成を生成したんやけど、PRMLLoader、createFromXML、addSceneFromXMLの使い分けがまだよくわかっておらず。flabakaさんの「PRMLLoaderとaddSceneFromXMLの使い分け」に書かれているように、「一気に全シーンを作成したい場合はPRMLLoader。任意の(シーンの)子シーンを作成したい場合は、addSceneFromXMLを使うのかな? と個人的に思っています。」ということみたいですけど。そうなるとcreateFromXMLはどうなんでしょ?すごい人誰か教えてくださいw。 あっコメントは最近スパムが多くなったので切っちゃったのでtwitterなりなんなりで出来たらお願いします(__)いいかげんこのブログもデザインしなければと思いつつ。。。 僕はProgression4でもPRMLLoaderを使っていこうかと思っているのですが、せっかくcreateFromXMLも使ってみたので、汚いソースですが晒しておきます。正しい使い方かどうかもわかりませぬが; package michinoko { import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequest; import jp.progression.Progression; import jp.progression.casts.*; import jp.progression.commands.display.*; import jp.progression.commands.lists.*; import jp.progression.commands.net.*; import jp.progression.commands.tweens.*; import jp.progression.commands.*; import jp.progression.config.*; import jp.progression.data.*; import jp.progression.debug.*; import jp.progression.events.*; import jp.progression.scenes.*; import michinoko.scenes.*; /** * … * @author michinoko * [...]
progression4もPublic Beta 1.3になって、またBeta 1.2でokやったのが、NGになってたり色々と仕様が変わりつつあるけど、とりあえずprogression4の新機能Resourceを使ってみました。カヤックさんの「Progression4の新機能Resourceを試してみる」などを参考に。 ついでにPreloadSWFも試してみたかったので、ロード処理はPreloader.asに書く。 //Preloader.asのatCastLoadStart()内、ex外部画像(img/gaibu1.png~img/gaibu5.png)の5枚を読み込む場合 var _loadCmd:LoadCommand; for (var i:int = 1; i
今年もよろしくお願いいたします。 って、もう1月もあと10日で終わりですが、なかなか更新してなくてスミマセン。 前に書いたつもりでいて書き忘れていたので、自分用にもすぐ忘れてしまうので、メモ。 FlashDevelopを僕は使っているのですが、NewClassを追加すると、 package { /** * … * @author michinoko */ public class NewClass { public function NewClass() { } } } みたいになりますよね?僕もしばらくそのまま使っていたのですが、バージョン管理や日付なども必要だなと思っていたらやはりありました。Custom Arguments。詳しくはflabakaさんのエントリーに書いているのですが、FlashDevelopのToolからCustomArgumentsで設定ができます。ただここはあくまで定数を入れるので、日付は別途テンプレートに直で書きます。 同じく、ToolsからApplicationFiles…を選ぶとエクスプローラが立ち上がります。そこで、Templatesから設定したいテンプレートファイルへアクセス。僕の場合だと、「C:\Users\michinoko\AppData\Local\FlashDevelop\Templates\ProjectFiles\AS3Project/Class.as.fdt」(win vista 64bit)です。このファイルをダブルクリックで、 package $(Package) $(CSLB){ /** $(CBI)* … $(CBI)* @author $(DefaultUser) $(CBI)* @see $(See) $(CBI)* @email $(EMail) $(CBI)* @version $(Version) $(CBI)* @date created $$(#DateTime#=yyyy.MM.dd) $(CBI)* */ public class [...]
やっとこさprogression4を触りだし、来週くらいには会社HPの実績に作ったprogression4のサイトがアップされるはず。。。触った感触としては3よりも全然早い! で、へなちょこFlasherの僕としてはタイムライン上にmcなどを置いて確認したり、各シーンからアクセスしたりもするんやけど、progression3のときCastDocument.root.instanceNameでアクセスしていたような気がするけどprogression4では使えない。。。んー?とちょっと詰まるも結論から言えば、MovieClip(CastDocument.root).instanceNameでアクセスできる。 そういや、parentを使うときも、parent.gotoAndPlay();でなく、MovieClip(parent).gotoAndPlay();とするなぁと納得。 ちなみに今回のは、PRMLLoaderを使って動的にシーンを作成して、各シーンは子swfをprogressionでなく普通のflaファイルで作成してみました。いつもprogression3でやっていたカタチがprogression4でもできたので、ひとまず上出来かなと。 LoadSWF関連はoshige先生の「さらにLoadSWF()が続く」を参考にさせていただきました。本当にいつもお世話になってます(__)。 あれprogression3のときって、_mc = MovieClip( MovieClip( CastDocument.root ).getChildByName( “instanceName” ) );でアクセスしていたような気もする。。。テストやモック以外ではタイムライン上のmcにアクセスすることがなくなっているのであやしめ。 >>2010.02.03追記 通常の場合は、MovieClip( CastDocument.root )でよいみたいやけど、SceneLoaderを使っている場合は、CastDocumentが変わるので、MovieClip(container)のほうが無難ぽい。
本来プレゼン用に使うのに非常に便利なSlidesライブラリですが、今回普通のwebページにも使ってみようということで、キーボード操作と同様の動きをボタンを使ってやろうとしてつまづいたメモ。 基本的には、uranodai.slides.sceneにあるMainScene.asとListScene.asに、ボタンを追加してキーボード操作と同じアクションをセットすればええんやけど、実行してみると、途中でSceneIdのエラーになってしまう。 解決法として、ボタンやサムネイルモードになるときの背景(デフォルトでグレイの)をaddChildでなく、addChildAtを使ってaddしてあげれば直った。どうやら、色々動的に足したせいかもしれんけど、なんかかぶってしまうみたい。それで、それぞれのインデックス位置を指定してあげることで解決。 まぁ、僕のへなちょこコードにしか起こらない現象かもしれないけど、一応メモ。
この前、大阪でCSS Nite in OSAKA, Vol.16があったみたいで、それにいつもお世話になっている宇都宮ウエブ制作所の正宗さんが「これから始めるFlashActionScriptツボのツボ」と言うセッションをしていて、そのスライドやサンプルをアップしてくれている。 セッションの内容は、 ■ActionScriptのあらまし ■AS3、こう書けば動く ■デザインに必要なXY座標と幅と高さ という具合にわかれていて、AS2しか触ったことないヒトがAS3を最初に触るにはとってもわかりやすい内容となってる。ダウンロードしたzipを解凍して、swfファイルを実行して、右矢印キーで次ページへ。ちなみに、去年のFPSでの乾杯している僕の後ろ姿も小さく載っているw。サンプルのflaファイルとかもアップしてくれているので、オススメです。 僕自身も、AS3で制作を始めたのが半年くらい前で、今はAS3でないとやりづらくてしょうがないんやけど、最初はAS2と全然違っていてよくわからない状態やったなぁと思いだした。去年行ったF-site「ActionScript最前線」での森さんの「強引にやさしいAS3入門」が衝撃やったのを思い出す。「に」祭り! 思い出したがてらにおさらいをしておくと、 ・addEventListenerを「に」と置き換えるということ! 実際に、onEnterFrameの処理の場合で例を出すと、 ■定義 ●任意な名前(たとえば) 「動かしたいムービークリップ」:test_mc 「何かを」:doAction 「処理を受け取るハコ」:hako 「毎フレーム行わせる内容」:trace(“毎フレームの処理”); とする。 ●決まり文句は、 「に」:addEventListener 「毎フレーム行わせる」:Event.ENTER_FRAME ようは、上記のように定義したなら、こう書いてってこと。 ■Ex test_mc.addEventListener(Event.ENTER_FRAME, doAction); function doAction(hako:Event):void { trace(“毎フレームの処理”); } 「動かしたいムービークリップ」.「に」(「毎フレーム行わせる」, 「何かを」 ); function 「何かを」(「処理を受け取るハコ」:Event):void { 「毎フレーム行わせる内容」 } という意味。
前々回Webカメラを買ったというエントリーを書いたので、FLASHでカメラを使う第1歩も。 単純にwebカメラの画像を出すだけ。 swfArea ソースのカメラ部分は、 _camera = Camera.getCamera(); _camera.setQuality(0, 80); if (_camera != null) { _video = new Video(480, 360); _video.attachCamera(_camera); addChild(_video); } これを応用していけば、キャプチャーしたBitmapを色々いじくったり色々出来る。 参加メンバーが豪華なJActionScriptersでの、LCDBitmapとかも面白いし凄い! //
ちょっとここんとこjsのエントリーが続いたけど、あくまで僕の本分はflashだと思っているので、flash関連のおさらいネタを。 「サーバーの日付時間を取得」って書いたけど、要はphpのdate関数を用いてサーバーの時間を取得しましょ。ってこと。 サーバーの時間を取ってこれば、PCのローカル時間にかかわらず正確な時間を取得できるし(サーバーの時間がくるってないこと前提やけど)、世界対応の時計ブログパーツなども制作可能となる。 実際問題としては、至って単純で、 //メインタイムライン1フレームに記述 var phpFile:String = “phpファイルへのURLパス”; function callPHP():void{ var urlRequest:URLRequest = new URLRequest(phpFile); var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE, serverResponseHandler); loader.load(urlRequest); } function serverResponseHandler(e:Event):void{ var loader:URLLoader = URLLoader(e.target); var urlVariables:URLVariables = new URLVariables(loader.data); trace(urlVariables.returnValue); //date is: 2009/05/12 11:33:13 } callPHP(); phpファイルの中身は、 <?php print “returnValue=date is: ” . date(“Y/m/d H:i:s”); ?> たったこんだけ。
flaファイル内にシェイプアニメーションやら、小さなflvを埋め込んだとき。 そのアニメーションをTweensyで制御するときは、どうするか? Tweenerやったら、 Tweener.addTween(mc, { _frame:30, time:1 } ); みたいに書けばよいが、それをTweensyにすると、 Tweensy.to( mc, { currentFrame:30 }, 1 ); でよさげ。 ただ気をつけなあかんのは、Tweenerの場合は、指定フレームで停止するけど、Tweensyではそのフレームにthis.stop();がないとplayされる。(gotoAndPlay扱い) そういえば、Blurとかのフィルターも、filterToメソッドを使ってたけど、 Tweesny.to( new BlurFilter(), { blurX:10, blurY:5 }, 1.5, null, 0, mc); でもいけるっぽい。
ちょっとクラス継承を調べていて、FlashのHelp(CS4からは、LiveDocsでなくHelpって言うんやね。知らんかった。)をたどってもええんやけど、どうせならHelpの表示クラスにあるような図が欲しいかなと。 表示オブジェクトクラスのクラス継承は、ここにある「フルサイズのグラフィックを表示」を押せば大きい画像で表示される。CS4を使っているヒトは、FashCS4を立ち上げる→PF1→Adobe Flash CS4 Professional ユーザガイド→ActionScript 3.0 およびコンポーネント→Flash 用 ActionScript 3.0 のプログラミング→表示のプログラミング→コア表示クラス。 ただ他のクラスもまとめて欲しかったんで調べてみると、FlexBuilder3を持っているヒトはTheOfficialFlexTeamBlogから入手できる。(FlexBuilder3のシリアルナンバーが必要) 僕はFlexBuilder3を持っていないので、さらに調べる。 ・ActionScript 3.0 Class Diagram(2.28MB) ・AS3-Class-Diagram-Viewer(4.5MB) を発見。上はPDF版で、下がAIR版。 個人的にはAIRのほうが好きかな。