dポイントプレゼントキャンペーン実施中!

Flashで作った簡単なゲームで、プレイヤーの名前・点数・ゲームを開始した日時などをゲーム終了時にメモ帳に書き出し上書き保存していくというのは可能でしょうか?1台のXPのパソコンでオフラインでの使用です。

メモ帳に↓こんな感じに自動的に上書き保存したいです。

たろう 2007/07/01 43点

はなこ 2007/07/04 32点

A 回答 (1件)

メモ帳に保存する という言葉は普通は通じませんよ。



メモ帳でも開けるような,
テキストファイルに保存する のですよね。

とりあえずの大前提として,
Flash Player の能力としてはそういうものはありませんから,
ActionScript だけでいくら頑張っても無理です。
他言語や他のアプリケーションを使用しなければなりません。

また,ローカルにデータを保存する場合は,
OSなどの環境によって言語や保存の仕方が変わります。
そういうわけで,Windows(XP)限定でなおかつ,オフラインでの使用限定で回答します。

さらに,
SWF 単体を スタンドアローンFlashPlayer で起動させたり,
パブリッシュしたプロジェクタファイル(EXE) 単体の起動では,
上記の通り基本的にそういうことは普通は不可能ですから,
HTML(またはHTA)に貼り付けた SWF をブラウザなどで閲覧した状態から保存する方法を取ります。

言語的に流れを簡単に書けば,

 ActionScript
    → HTML
       → JavaScript
          → WSH
             →ブラウザがテキストファイルを保存

という連携で考えます。
JavaScript は VBScript でもかまいませんが,今回の場合は JavaScript を経由する方法を書きます。


まず,SWF ファイルを貼り付ける HTML(HTA) のソースコードを次のようにします。

/////////////////////////////////////////////////////////////////
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<title>テキストファイル保存テスト</title>
<script type="text/javascript">
<!--
function saveData(user,mydate,point){
var FSO, myfile;
FSO = new ActiveXObject("Scripting.FileSystemObject");
myfile = FSO.OpenTextFile("c:\\FlashGame.txt", 8, true);
myfile.WriteLine(user +" "+mydate+" "+point);
myfile.Close();
}
// -->
</script>
</head>
<body>
~★ここに SWF を貼り付けるタグを書く★~
</body>
</html>
/////////////////////////////////////////////////////////////////

一応,JavaScript で saveData() というユーザ定義関数を定義しています。
JavaScript では WSH を使用して,
「ドライブC」の直下に「FlashGame.txt」を新規で保存するか,
保存してあった場合,追加でデータを書き加えるというものを実行するようにしています。



Flash ですが,
ステージ上に,
「user_name」というインスタンス名(変数名ではありません)のテキスト入力のテキストフィールドと,
「user_point」というインスタンスのテキスト入力のテキストフィールドと,
ボタンを1つ作成します。
テキスト入力のテキストフィールドは2つとも周りの囲い枠(ボーダー)があった方が良いと思います。
文字の色も黒など見える色に設定してください。


そして用意したボタンには次のようなスクリプトを書きます。

/////////////////////////////////////////////////////////////////
on (release) {
// 変数 un に user_name の値を代入
un = _root.user_name.text;
// 変数 up に user_point の値を代入
up = _root.user_point.text;
// now という Dateオブジェクトの作成
now = new Date();
// 変数 y に年を取得
y = now.getFullYear();
// 変数 m に月を取得(+1)
m = now.getMonth()+1;
// m の桁合わせ
m = ("0"+m).substr(-2, 2);
// 変数 d に日を取得
d = now.getDate();
// d の桁合わせ
d = ("0"+d).substr(-2, 2);
// 日付文字列 md の作成
md = y+"/"+m+"/"+d;
// JavaScript の saveData(名前,日付,得点) を実行
getURL("javascript:saveData("+"'"+un+"','"+md+"','"+up+"点'"+");");
}
/////////////////////////////////////////////////////////////////


これで,SWFをパブリッシュして,
その SWF を上で用意した HTMLに貼り付け,ブラウザで閲覧し,
2つのテキストフィールドに何かを記入し,
ボタンをクリックすると,
「このページの ActiveX コントロールは、安全でない可能性が…」という「警告」が出ますが,
「はい(Y)」をクリックすると,
「ドライブC」の直下に「FlashGame.txt」が保存されると思います。
セキュリティの関係で「はい(Y)」をクリックしても何も保存されない可能性はあります。

わかっていらっしゃるとは思いますが,
保存されたとしても,「警告」が出るのは当たり前だと思ってください。
上の場合は,無害なテキストファイルが保存されるだけですが,
場合によっては有害なプログラムを任意の場所に保存することも可能です。
ネット上では,こういう無害なものでも,使うことはご法度です。
無害であっても,大切なデータに何か違うファイルを上書き保存してしまう可能性も考えられます。
FlashPlayer がそんなことをできない理由もそこにあります。

「警告」を出したくない場合は,
HTML の拡張子を .hta に変えれば普通うまく行くのですが,
なぜか私の環境では拡張子を変えるとまったく何も保存されなくなりました。



この回答の内容の大半は,Flash とは関係がない話です。
私は,次のページあたりを参考にして作成しました。

OpenTextFile メソッド
http://msdn.microsoft.com/library/ja/default.asp …

第10回 WSHスクリプトからのファイル操作(1)
http://www.atmarkit.co.jp/fwin2k/operation/wsh10 …



もっと詳細な説明が必要である場合や,カスタマイズしたい場合などは,
WSH(Windows Script Host) のカテゴリ(そんなカテゴリありましたっけ?) などの方が,良い回答が得られると思います。
(または,「WSH Flash」 などと Google や Yahoo! で検索してみるとか。)



Flash はローカルアプリケーションに使うことには向いていません。
テキストファイルを保存するだけでも,他言語を利用しないとなりませんし,複雑で,不確実です。

確実にテキストファイルを保存したいのでしたら,
Flashで選択可能なダイナミックテキスト上に,
 たろう 2007/07/01 43点
というようなデータを表示させて,
手動でメモ帳にコピペして,メモ帳でテキストファイルを保存することです。
もしくは,
最初からテキストファイルを保存するようなゲーム を Flash で作ることをやめるかですね。
とにかく,ローカルアプリケーションには向いていませんね(悲しいことに)。
 
    • good
    • 0
この回答へのお礼

回答していただきありがとうございました。
大変参考になりました!

お礼日時:2007/07/06 08:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!