2007.11.28
category
comments

AIRでのローカルディレクトリのアクセス先

ローカルディレクトリにアクセスする場合、AIR側でプラットフォーム間の差異を吸収してくれるらしい。具体的にどこを参照しているのかメモ。(Winの場合)

File.applicationResourceDirectory
C:\Documents and Settings\ユーザ名\air\test

アプリファイル本体があるディレクトリ。

File.applicationStorageDirectory
C:\Documents and Settings\ユーザ名\Application Data\アプリID\Local Store

これが分かりにくい。AIRをパッケージするときにアプリ設定の画面で設定したID名(info.five.testとか)でディレクトリが作られてて、その中の「Local Store」を指してるみたい。

File.desktopDirectory
C:\Documents and Settings\ユーザ名\デスクトップ

これはそのまんまデスクトップ。

File.documentsDirectory
C:\Documents and Settings\ユーザ名\My Documents

これもそのまんまマイドキュメント。

File.userDirectory
C:\Documents and Settings\ユーザ名\

ログインユーザのデフォルトディレクトリ。

2007.11.21
category
comments

ランダムテキストをやってみる

最近ビットマップフォントの常套モーションになっているランダムテキストを自作してみた。最初のモーションですべての文字を「アンダーバー」に変えてからランダムに1文字づつシャッフルしてます。TimerEventで動かしてるんだけど、シャッフルのスピードがブラウザで見るとやや遅い。デバッグプレイヤーだと思い通りのスピードなのに。ENTER_FRAMEで動かすほうが良いの?。誰か教えてください。

コードは以下参照。シャッフル時間を任意に調整できるようにしてます。

ACTIONSCRIPT:
package info.five.filters
{
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
   
    public class RandomText
    {
        const _replaceWord:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789=+-*/!?";
        private var _content:TextField;
        private var _word:String;
        private var _timer:Timer;
        private var _randomCnt:uint;
        private var _randomArr:Array = new Array();
        private var _shuffleArr:Array = new Array();
        private var _speed:Number = 1;
        private var _time:uint = 30;
        private var _cnt1:uint = 0;
        private var _cnt2:uint = 0;
       
       
        //------------------------------
        //   ランダムテキストクラス
        //------------------------------
        public function RandomText(content:TextField)
        {
            this._content = content;
            this._word = content.text;
           
            _timer = new Timer(_speed, 0);
            _timer.addEventListener(TimerEvent.TIMER, onTick, false, 0, true);
        }
       
       
        //------------------------------
        //   テキストの再設定
        //------------------------------
        public function setText(newText:String):void
        {
            this._word = newText;
        }
       
       
        //------------------------------
        //   モーションスタート
        //------------------------------
        public function start():void
        {
            //-----[変数の初期化]
            _content.text = "";
            _randomCnt = 0;
            _randomArr = [];
            _shuffleArr = [];
            _cnt1 = 0;
            _cnt2 = 0;
           
            _content.wordWrap = false;
            _content.autoSize = TextFieldAutoSize.LEFT;
           
            //-----[文字番号を配列に取得]
            for(var i:uint=0; i<_word .length; i++)
            {
                _randomArr.push(i);
                _content.appendText("_");
            }
           
            //-----[文字番号をシャッフル]
            _shuffleArr = shuffle(_randomArr);
           
            _timer.start();
        }
       
        //------------------------------
        //   配列のシャッフル
        //------------------------------
        private function shuffle(arr:Array):Array
        {
            var l = arr.length;
            var newArr = arr;
           
            while(l)
            {
                var m = Math.floor(Math.random()*l);
                var n = newArr[--l];
                newArr[l] = newArr[m];
                newArr[m] = n;
            }
            return newArr;
        }
       
       
        //------------------------------
        //   シャッフルモーション
        //------------------------------
        private function onTick(e:TimerEvent):void
        {
            if(_randomCnt <_time)
            {
                var randomNo:uint = Math.round(Math.random() * _replaceWord.length);
               
                var s1:uint = _shuffleArr[_cnt1];
                var s2:uint = _shuffleArr[_cnt1] + 1;
                var s3:String = _replaceWord.charAt(randomNo);
               
                _content.replaceText(s1, s2, s3);
               
                if(_cnt1>= _word.length - 1) _cnt1 = 0;
                else _cnt1++;
            }
            else
            {
                var s4:uint = _shuffleArr[_cnt2];
                var s5:uint = _shuffleArr[_cnt2] + 1;
                var s6:String = _word.charAt(_shuffleArr[_cnt2]);
               
                _content.replaceText(s4, s5, s6);
                _cnt2++;
               
                if(_cnt2>= _word.length)
                {
                    _timer.stop();
                }
            }
            _randomCnt++;
        }
       
       
        //------------------------------
        //    getter
        //------------------------------
        public function get time():uint
        {
            return _time;
        }
       
       
        //------------------------------
        //    setter
        //------------------------------
        public function set time(t:uint):void
        {
            _time = t;
        }
    }
}

使い方はテキストフィールドを引数にインスタンスを作ってstart()メソッドを呼ぶだけ。

ACTIONSCRIPT:
import info.five.filters.RandomText;

var randomText1:RandomText = new RandomText(myText1);
randomText1.start();

シャッフルスピードを変えるにはtimeプロパティを変える。(デフォルトは30)

ACTIONSCRIPT:
randomText1.time = 100;

テキストを変更するには、setText()メソッドの引数に文字列を与える。

ACTIONSCRIPT:
randomText1.setText("HOGE")
randomText1.start();

2007.11.06
category
comments

Adobe MAX Japan 2007(2日目)

dsc_1084.JPG

2日目のセッションはこちら。

S-3 アドビシステムズが考える未来に向けたテクノロジーの可能性と日本市場に対しての展望
A-5 Adobe AIR APIの使い方
C-6 インタラクションデザインの実際:アイデアの開発
D-7 ActionScript3.0とインタラクティブデザイン
D-8 FlexBuilderで使いこなす、ActionScript3.0~最適化とプロファイリング
S-4 スペシャルイベント:スゴロクアワード 表彰式

tha中村さんのセッションでは過去の作品や実験、アイデアから実案件につながっていく話を聞かせてもらいました。当時やってた試みを振り返ってみて、あれ使えるんじゃないか的に再度掘り起こしてみるそうです。使っていて楽しい、気持ちよい感覚を徹底的に表現することで10年前の作品を見ていてもいろんな意味で新鮮さがありました。またどのサイトも説明ぽくなっておらず、触れる事で分かる楽しさがあります。あー、なるほどねと。「前後で認識が変わる感覚」という言葉が印象的でした。あとジャイルみたいなコンセプチュアルな表現も人になかなか説明しづらいんだけど、うまい具合にビジュアル化されてて神秘的な世界観をじっと見ちゃう感覚に襲われます。そもそも自分みたいに説明しようと先走る時点でダメなんですね、はい。

同じくthaの深津さんのセッションでは表現を実現するまでのスタディを紹介してもらいました。ジャイルの渦巻きタイポの初期バージョンとか。挙動単位でクラス作ってパラメータやパスURLはXMLで全て外部化。こうすることで派生バージョンの管理をXMLの差し替えだけでできるようになる。このXMLにはかなり細かい動作のパラメータが書かれてました。(何秒間表示するか、パーティクルの数、フラグとか)表示や演出に関してのクラスは案件ごとに使い捨てらしい。すごい。+39さんのセッションでも思ったけど自分の作り方にもう涙目。

2007.11.03
category
comments

Adobe MAX Japan 2007(1日目)

dsc_1074.JPG

行ってきました、AdobeMAX。1日目の選択セッションはこちら。まとめレポートはいろんなブログで詳しく書かれているので、特にインパクトの強かったセッションだけを抜粋。

S-1 あらゆるユーザのアイデアや情報との関わり方に改革をもたらすアドビプラットフォームテクノロジーの現在
D-1 ニコニコ動画とFlash
E-2 Flashによる3D空間の創造とメカニズム
D-3 Flash Lite3.0で広がるモバイルコンテンツの世界
C-4 AS3だけじゃない!まだまだいけるぞAS1/2!
S-2 Technology Sneak Peak

まずはROXIKの城戸さんのセッション。これはプレゼン用のFlashからしてすごかった。軽く引きました。PICTAPSのような100体以上のキャラクターが3D空間を人文字のように整列してスライドの文章を表していました。その動きも走るアニメーションからその場でジャンプしたりと個々に設定されていて、Wiiの似顔絵チャンネルの広場みたいな感じ。内容は現在進行中の仕事の紹介や、制作の一連の流れをデモとして見せてくれました。FlashとLightWaveとFireworksを同時に立ち上げて制作するそうです。LightWaveでポリゴンの形を作って、Fireworksでテクスチャを作る。これらの作業の変更内容がリアルタイムにFlashのswfに反映されてました。(swfは開きっぱなしの状態で!)その後、2Dと3Dの違いや座標変換の仕組みについてなど。Papervision3Dなどのフレームワークは使わないで、ゼロから自作でコードを書くことをお勧めしますと言ってました。またWebでの3D表現の世界はまだ始まっていないらしく、今勉強しておくことは将来必ず自分のためになると。仕組みも分からずフレームワークに頼ると、どこかで破綻して思い通りの気持ちよい動きは実装できないという事らしい。確かにPapervision3D使うと、なんとなく動くけど細かい制御をしようと思うと途端にコードが書けなくなってしまう。これには納得。自作3Dクラスに挑戦してみようかなと思った。

次はKARATE SYSTEM+39さんのセッション。ここでは主に社内で使っている独自フレームワークの紹介とMVCの概念について。正直ハイレベルすぎてついて行けませんでした。設計方法に衝撃。200~500行くらいのボリュームでクラスを細かく作る。1案件で100個くらい。基本処理の「Model」、表示の「View」、ViewとModelを制御する「Controller」の組み合わせで処理する。ASについては独学でやってきてるので他人の書き方や構造について聞けると非常に参考になる。MVCの考え方については勉強になったし、大きな収穫だった。これも勉強してみよう。

page 1 / 11