ホーム >> 左脳Script >> もちゃっと >> 作業日記 >> もチャット作成日誌:2010年7月10日

もチャット作成日誌:2010年7月10日


もチャット作成作業日記です。



2010年7月10日

  • マップエディットの場合に限り、別の方法でデータの管理を行う形にした。こういう時に、クラスの継承は便利である。
    本来マップチップオブジェクトが保持しない、チップID(どのファイルの、どの位置にある画像データをチップとして扱うか、またチップの移動判定を文字列で管理。)の詳細を保持するようにした。

  • マップチップパレットで設定した「当たり判定」「移動可能方向」「表示状態」を SharedObject に保存する形にした。 作業のモードを変更する際に、いちいち保存するので、ユーザーはそれほど、設定の保存を意識しなくてもよい。
    →いずれは、アプリケーション設定のファイルに書き出す形式にしたい。

  • 編集したマップデータを、asソースコード の Object 記述形式で出力出来るようになった。
    しかし、ファイル名は時間をミリ秒まで表した単純なもので、出力ディレクトリはデスクトップ固定。
    そして、この書き出したデータはエディタで再利用できない。ソースコードにマージして、マップをハードコーディングする形となる。
    →マップチップの設定と、編集中のマップデータをマップエディタプロジェクトファイルとして 書き出せるようにしたい。

とにかく、「マップを編集し保存できる」形に、ようやく達した。
正直いうと、今日一日朝から気力が上がらず、やっつけで機能実装した状態になってしまった。 ひとまず動くものが出来たので、ブラッシュアップしていく事にする。


データの保存場所

設定を恒常的に扱えるようにする為、SharedObject に保存していたが、データの保存場所が良くわからない。 機能はしているようなので、どこかにデータがあるはずなのだが。


「AIR アプリケーションなんだし、ファイル使おうよ」という訳で、ドコにあるか解らないデータを探すのは早々にやめた。 しかし、単純に「データを保存する」という機能に特化しているのか設計の観点から見ると SharedObject は使いやすい。
データ保存のキーのようなものを指定するだけで良いのだ。これがファイルだと、その保存場所から保存時の名称までを入力、 もしくは設定する必要があり、その U/I を作らなければならないと言うことになる。

作業途中の維持地データの保存なので、保存場所はアプリケーション固有のディレクトリでよい。 ファイル名は「データ保存のキー」(SharedObjectでも使っている)でよい。 と、指定が必要な部分を限定すればどんどん間単になり、最終的に SharedObject と使い勝手のあまり変わらないデータ保存クラスが出来た。

FileObject.as

package editor 
{
    import flash.filesystem.File;
    import flash.filesystem.FileMode;
    import flash.filesystem.FileStream;
    /**
     * ...
     * @author 
     */
    public class FileObject
    {
        private var dataObject:Object;
        private var target:File;
        /**
         * 初期化。
         */
        public function FileObject() 
        {
            target = null;
            dataObject = new Object();
        }
        /**
         * 対象のデータを読み込み。
         * @param   index
         */
        public function getLocal(index:String):void 
        {
            target = File.applicationStorageDirectory.resolvePath(index);
            load();
        }
        /**
         * 対象データの実体となるファイルを読み込む。
         */
        private function load():void 
        {
            dataObject = null;
            if (target && target.exists)
            {
                var fs:FileStream = new FileStream();
                try
                {
                    fs.open(target, FileMode.READ);
                    dataObject = fs.readObject();
                }
                catch (err:Error)
                {
                    dataObject = null;
                }
                finally 
                {
                    fs.close();
                }
            }
            if (!dataObject)    dataObject = new Object();
        }
        /**
         * 読み込んだオブジェクトへの参照。
         */
        public function get data():Object 
        {
            return  target ? dataObject : null;
        }
        /**
         * オブジェクトを書き出す。
         * @return
         */
        public function flush():Boolean 
        {
            if (!target)    return  false;
            //
            var fs:FileStream = new FileStream();
            try
            {
                fs.open(target, FileMode.WRITE);
                fs.writeObject(dataObject);
            }
            catch (err:Error)
            {
                return  false;
            }
            finally 
            {
                fs.close();
            }
            return  true;
        }
    }
}
使い方は簡単だ。AMF 万歳。
SharedObject の使い方を踏襲しているので、SharedObject を使っていた方なら解るはず。

2010年7月11日追記:保存場所がわかった。WindowsXP では以下のようになった。
C:\Documents and Settings\ユーザー名\Application Data\アプリケーション名\Local Store\#SharedObjects\アプリケーションSWF名\データーキー名称.sol

さらに言うと、データの保存場所がわかってしまったので、FileObject.as の存在意義が問われ始めている。機能はSharedObjectと同じなので、ソースを弄れば保存場所を変更できる程度にしか優位点がなくなってしまった。





トラックバック(0)

トラックバックURL: http://n-yagi.0r2.net/sanoupulurun/mt-tb.cgi/271

コメントする

ホーム >> 左脳Script >> もちゃっと >> 作業日記 >> もチャット作成日誌:2010年7月10日

アーカイブ

このブログ記事について

このページは、n-yagiが2010年8月29日 10:42に書いたブログ記事です。

ひとつ前のブログ記事は「もチャット作成日誌:2010年7月9日」です。

次のブログ記事は「Object と キャスト」です。

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

Creative Commons License
このブログはクリエイティブ・コモンズでライセンスされています。