NEWS

2017.10.21 「バージョンごとの機能比較」を更新しました。

  • Web creators

ActionScript

データをCookieのように保存する(sharedobject)

概要

Flashにはプロモーションやムービーを再生させるだけでなく、閲覧者のパソコンの中にデータを保存する機能がありブラウザのCookieのような使い方ができます。
これを応用した例として「一度見たムービーをスキップする」のように再アクセス時に動作を変えることができたり、ゲームなどでプレイ途中のデータを一時保存して再度続きから遊ぶことができます。

サンプル解説

お使いの端末にメモ書きを残すFlashです。
入力欄に情報を入力し、「書き込み」ボタンで保存されます。
また、入力欄の文字を削除して「読み込み」ボタンを押すと、保存した情報表示されます。
「保存削除」を押すと、保存した情報をファイルごと削除します。

作成法

(1)パブリッシュの設定

・パブリッシュの設定より「ActionScript 3.0」に設定。

パブリッシュの設定

(2)ステージの設定

・ActionScriptを設定するレイヤー「action」を作成。

レイヤーの設定

(3)コンポーネントの配置

・上部メニューより「ウィンドウ->コンポーネント」を選択。
・コンポーネントウィンドウより「Button」を3つ、「TextArea」を1つ配置。

コンポーネントの配置

・TextAreaのインスタンス名を「outputArea」に設定。
・Buttonの1つを選択し、インスタンス名を「bu_input」、コンポーネントインスペクタ内の"label"を「書き込み」に設定する。

コンポーネントの設定

・上記同様にButtonの1つを選択し、インスタンス名を「bu_output」、コンポーネントインスペクタ内の"label"を「読み込み」に設定する。
・上記同様にButtonの1つを選択し、インスタンス名を「bu_delete」、コンポーネントインスペクタ内の"label"を「保存削除」に設定する。

(4)ステージにActionScriptの設定

・レイヤー「action」に以下のActionScriptを設定。

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
var so : SharedObject = SharedObject.getLocal("flashrave_data","/");

outputArea.text = String(so.data.text);
if(outputArea.text == "undefined"){
 outputArea.text = "保存した情報がありません。";
}

bu_input.addEventListener(MouseEvent.CLICK,function(){
 so.data.text = outputArea.text;
 so.flush();
});

bu_output.addEventListener(MouseEvent.CLICK,function(){
 outputArea.text = String(so.data.text);
});

bu_delete.addEventListener(MouseEvent.CLICK,function(){
 so.clear();
 outputArea.text = "情報を削除しました。";
});

解説

サンプルのような動作はActionScriptの「SharedObject」関数で実現することができます。
「SharedObject」で情報を書き込む際、Windowsであれば次のような場所に保存ファイルが生成されます。

「C:\Documents and Settings\ユーザ名\Application Data\Macromedia\Flash Player\#SharedObjects\固有ID\ホスト名」

上記の"ホスト名"はドメインやIPごとにフォルダが生成されます。
そのため、全く同じ動作をするFlashを読み込んでもドメインが異なる場合はそれぞれ保存ファイルも生成されるので情報が漏洩するといったことはありません。
また、手元のパソコンで動作検証した場合は「localhost」というホスト名でファイルが生成されます。

ActionScriptの01では「flashrave_data」という固有名のSharedObjectオブジェクトを宣言しています。
この「flashrave_data」が保存時のファイル名となり、"/"でホスト名フォルダの直下に保存することを指しています。
"/"をつけない場合は、サーバ上のディレクトリ構成を模した階層状態で保存されます。
10ではSharedObjectオブジェクトへ保存を、14ではSharedObjectオブジェクトから情報の取得を、18では保存ファイルの削除を行っています。

ページ上部へ