この前、大阪で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 { 「毎フレーム行わせる内容」 } という意味。
久々にがっつりとAS2で制作。 最近はずっとAS3クラスベースで作っているので、AS2でも同じように作りたい! 結論から行けば、 //フレームアクション:1フレ目 this.__proto__ = Function(Main).prototype; Function(Main).apply(this, null); //Main.as class Main { public function Main() { trace(“コンストラクタ関数”); } } もちろんクラスパスを通すのが必須。flaファイルと同階層ならパスを通す必要無し。これでAS3のドキュメントクラスと同じように出来る。 ただtweenerとかでステージ上にあるMCを制御するにはこれだけではダメで、test_mcがステージ上にある場合のMain2.asは、 //Main2.as import caurina.transitions.Tweener; class Main2 extends MovieClip { var test_mc:MovieClip; //インスタンス名 public function Main2() { trace(“コンストラクタ関数”); Tweener.addTween(test_mc, { _x:600, _y:400, time:1 } ); } } と、extends MovieClipせんと動かんかった。
ちょっとAS2の質問をされ、久々に触ったんで一応書いておこ。 やりたいことは、 ・カウンターみたく現在の番号を取得してボタンを押せば次の番号を取得。 ・ボタンは2回目のアクセスからは押せない。一度のみ。 とのこと。 まぁ色々とやり方はあるのだろうけど時間も無かったことで、とりあえずカウンターみたく数を数えるのはLoadVarsを使ってテキストを読み込み→phpでカウントアップ→番号更新として。アクセスの回数はSharedObjectでやってみた。 あんまりリクエストが無い限りソースを晒すのは恥ずかしいんやけど、ソースコードを表示するJS「dp.SyntaxHighlighter」を今更ながら入れてみたので晒してみます。 //メインタイムライン:ステージ上には、 //cnt_txtとclick_btn //Shift-jisを使う System.useCodepage = true; nowNum=0; //SharedObjectを使う mySOcookie = SharedObject.getLocal(“CookieData”); mySOtime_before = SharedObject.getLocal(“CookieTime”); //現在時間 TheDateObj = new Date(); nowtime = TheDateObj.getTime(); // 前回時間+600000ミリ秒 beforeTime = mySOtime_before.data.count + 600000; sa = nowtime – beforeTime; //一定時間がすぎていたら、リセット if (sa > 0) { mySOcookie.data.count = 1; } //現在の番号用LoadVarsオブジェクト text_lv=new LoadVars(); text_lv.onLoad=function(success){ [...]