![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
いつもお世話になっております。
早速質問させていただきます(><;
いまFlashでアドベンチャーゲームを作って居りまして、その内容がとても長くなってしまい、
シンボル数やフレーム数がとんでもないことになってしまいました。
MacromediaさんのHPの方でも「あまりに長すぎるswfファイルは誤作動を起こしかねない」と云うようなことが書かれており、少し怖くなったので、ゲームのswfファイルを[前編・後編]2つに分けました。
そこで質問なのですが、例えば前編のswfファイルでセーブデータ(プレイヤーに入力させた数値など)をSharedObjectで保存し、そのデータを後編のswfファイルで読み込むこと、というのは可能なのでしょうか?
解りにくい質問文で恐縮ですが、何卒ご教授お願いします;;;
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_10.png?e8efa67)
No.2ベストアンサー
- 回答日時:
#1です。
書かれているそれだけを見るならスクリプトは合っています。
そんなに深く考えるものでもなく,
1つのムービークリップから _root に変数を置く感覚で良いのですよ。
chara に何か値が入った後に
_root.player_name = chara;
で _root の player_name に変数を送っていればうまく行きます。
~うまく行く例~
a.swf に chara という変数名の テキスト入力のテキストフィールドを用意しておいて,
そのテキストフィールドに例えば abcd と"Flashの作成段階"で書いておきます。
その a.swf を読み込む方には
loadMC というインスタンス名のムービークリップと
player_name という変数名のテキストフィールドを用意しておいて,
フレームに
_root.loadMC.loadMovie("a.swf");
と書いて, a.swf を loadMC に読み込むと,
abcd という値が player_name という変数名のテキストフィールドにちゃんと入ります。
読み込むSWFを a.swf より大きくしておいて 角の方に player_name という変数名のテキストフィールドを置くか,
loadMC というインスタンス名のムービークリップより上のレイヤーに
player_name という変数名のテキストフィールドを置くと,
そのテキストフィールドが見えますよね。
~うまく行かない例~
上記うまく行く例の a.swf にある テキストフィールド chara の内容を
abcd から efgh に書きかえると当然,
_root の player_name という変数名のテキストフィールドは変更されず,
abcd のままです。
当たり前ですよね。
_root.player_name = chara;
は a.swf を読み込んだときにしか実行されませんから。
その場合, a.swf に
on (release) {
_root.player_name = chara;
}
と書いたボタンを用意しておいて,
abcd から efgh に書きかえたあとにこのボタンをクリックすれば,
_root の player_name も変更されます。
または,
読み込むSWF側に
on (release) {
player_name = _root.loadMC.chara;
}
と書いたボタンを用意しておいて,
abcd から efgh に書きかえたあとにこのボタンをクリックすれば,
_root の player_name も変更されます。
単にそれだけのことですよ。
=============================================
ただ,今まで作られていたゲームのSWFに _root というパスが使われていた場合,
そのゲームをちがうSWFに読み込むと,
そのゲームに書いてある _root は読み込むSWFの _root になってしまうので,その辺の変更の方が大変かもしれません。
もし大変であれば,
_lockroot=true;
を使って,
_root をロックする方法も考えられます。
「Macromedia Flash Player 7 リリースノート」
http://www.macromedia.com/support/documentation/ …
「ファイルの読み込みについて」(loadMobie全般に関しても参考になるかも)
http://hakuhin.hp.infoseek.co.jp/main/as/import. …
具体的には,読み込むムービーのフレームに
_root.loadMC._lockroot=true;
_root.loadMC.loadMovie("a.swf");
と書くと言うことです。
これで,a.swf (ゲームの前編) に _root が使われていたとしても,
その _root は a.swf の _root を指したままになるので, _root が変わることはありません。
しかし!
これを使った場合,
_root.player_name = chara;
も効かなくなるので,ここを
_parent.player_name = chara;
などという相対パスを使って変数を送ることになります。
ごちゃごちゃいらないことを書きましたが,
結局,ロードされるものはロードされるものとして最初から考えて作らないと,結構ややこしいことになるということです。
sassakunさんが記述して下さったスクリプトをコピペしながら、何とか私の考えていた通りにできました(*^∀^*)
_rootの直しがちょこっと大変でしたが(笑)
長文での丁寧なご説明、本当にありがとうございます!!
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_10.png?e8efa67)
No.1
- 回答日時:
場合が多すぎるのでうまく説明できないのですが…
もし,ゲーム a.swf , b.swf のアドレスが,
http://○○/Share/a.swf
http://○○/Share/b.swf
であった場合,a.swf のボタンに
on (release) {
point_set = SharedObject.getLocal("mySol","/Share");
point_set.data.point_a = 5;
}
と書いて,そのボタンをクリックすれば,
ローカルの 「Share」 フォルダに,「mySol.sol」 というSOLファイルができ,
その中の point_a という変数に 5 という値が入ります。
b.swf のボタンに
on (release) {
point_get = SharedObject.getLocal("mySol","/Share");
if (point_get.data.point_a != undefind) {
point_a = point_get.data.point_a;
//もしsolファイルにphoto_countがなければ
} else {
point_a = 0;
}
}
と書いて,そのボタンをクリックすれば,
a.swf と同じ,ローカルの 「Share」 フォルダの,「mySol.sol」 というSOLファイルを参照し,
もしそこの変数 point_a に何か値が入っていれば, b.swf の point_a にはその保存された値が入り,
もし point_a に何も値が入っていなけば, b.swf の point_a には 0 という値が入ります。
UPしたものは trace(); では実験できませんし,ローカルでも実験しにくいので,
_root に point_a という変数名のテキストフィールドを用意しておくとわかりやすいです。
SharedObject.getLocal("mySol","/Share");
の部分がポイントです。
a.swf に
SharedObject.getLocal("mySol");
と書いただけでは,
ローカルの 「Share」 フォルダの中に,「 a.swf 」 というフォルダができ,
その中に「mySol.sol」というSOLファイルができるので共有できません。
"/Share" など,パスを付け加えることによって初めて共有できます。
パスが "/" のときは,サーバの直下に 「mySol.sol」 ができます。
これを参照しても良いです。
"/Share" などは,勝手に決められるわけではなく,実際に a.swf が 「Share」というフォルダ内にあれば,そこにsolを作成できます。
以上のことは,loadMovie でしても同じです。
ロードする側のムービーはどうでも良くて,結局ロードされた a.swf などのアドレスによって,solファイルができます。
参考になるHPが少ないですね。
概念的なことしか書いていないサイトが多いです。
ややこしいようですが,スクリプトは大したことありませんし,高度な数学を使うようなものでもないです。
まずは,動くサンプルを作られて,色々実験してみれば,すぐに使えるようにはなると思います。
ちょっと,気になったのですが。
>> ゲームのswfファイルを[前編・後編]2つに分けました。
と書かれていますが,大きなファイルになってくると,実際にはそのようにファイルを分けます。
でも,普通は,SharedObject は使いませんよ。
まず,ロードするSWFを作って,そこに loadMovie で「前編.swf」をロードし,ゲーム結果などの変数を _root にすべて上げておきます。
次に同じSWFに「後編.swf」をロードし, _root から変数を受け取ってその変数によって動作させます。
loadMovie だと,画面の切り替えもスムーズに行きますし,同じMCなどに loadMovie させるといちいち unload させる必要もありません。
getURL で「前編.swf」から「後編.swf」に移る場合は,他の物を経由する必要が出てきます。
その場合,JavaScript経由などで変数を渡すよりは
SharedObject を経由した方が簡単で確かなので SharedObject の使用も考えられます。
でも getURL だとページ全体が入れ替わるのでギクシャクしますよ。
loadMovie で _root に変数を上げる方が良いと思いますよ。
長文での丁寧な説明、ありがとうございます!(><。
>> でも,普通は,SharedObject は使いませんよ。
まず,ロードするSWFを作って,そこに loadMovie で「前編.swf」をロードし,
ゲーム結果などの変数を _root にすべて~~(中略)~~loadMovie させると
いちいち unload させる必要もありません。
この方法に目からウロコが落ちるかの如く納得させられました(笑)確かにこの方がスムーズですよね(^^;
さっそく試させて頂きましたところ、、、新たな問題がΣ(◎△◎;)!!!
_root⇔前編.swfの変数の受け渡し方法が解らないのです;;;
_rootの「player_name」という変数の中身を前編.swfの「chara」という変数に入れたいと思い、前編.swfに
_root.player_name = chara;
と書いてcharaを表示させてみたところ「undefined」になってしまいました;;;;;
もしやとても初歩的なことを訊いているのかもしれませんが、_root⇔前編.swfでの変数の受け渡し方法を教えて頂けませんでしょうか(>△<;
本当に申し訳ないのですが、お願い致します!!;;;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 画像編集・動画編集・音楽編集 inkscapeで作成した図の保存の仕方とその保存したファイルの編集の仕方 1 2022/09/22 09:33
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- バックアップ Windows11パソコンのデータを数クリックで完全に引っ越しするにはどうすれば良いでしょうか? 5 2022/10/11 14:08
- その他(インターネット接続・インフラ) (Google workspace)google以外のアカウントの利用制限と対策を相談させてください 1 2022/10/11 16:18
- その他(プログラミング・Web制作) 質問です。 sdカード内に、データ①があります。これはaというファイルに入っています。sd→a→①で 4 2023/07/24 14:58
- Word(ワード) PCで作ったwordをスマホで編集しようとすると「このファイルは読み取り専用です。」と表示される。 3 2023/05/30 14:51
- 画像編集・動画編集・音楽編集 動画をディスク作成すると画像が乱れる。 4 2022/06/24 07:49
- Excel(エクセル) エクセル 任意の列数で分割する方法 3 2022/07/31 14:58
- その他(ソフトウェア) コマンドプロンプトについて教えてください。 状況: 画像編集ソフト上でネットから保存した画像を使うの 3 2022/05/26 11:14
- Excel(エクセル) Excelファイルをダウロードして編集した後、自身のパソコンに保存する際 2 2022/12/21 17:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
arduino プログラムについて
-
スマホでサイトの画像を長押し→...
-
この曲はなんでしょう?
-
フラッシュゲームアーカイブ2
-
Flashは2020年にサポートが終了...
-
potplayerについて質問です
-
ボカロ動画はFlash?HTML5?
-
flash (.swf) を編集したい
-
FLASHでゲームを作っていた人は...
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
-
ダウンロードしたデジブックはa...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Flashのループが止まりません。。
-
swf終了後、違うswfに自動で移...
-
外部swfのアップロード
-
複数あるflashをファイルをペー...
-
外部swfの読み込みをくりかえし...
-
*SharedObjectで保存したデー...
-
お世話になります。windowsXP ...
-
AS3でif関数で外部SWFを読み込...
-
子swfから親swfのstageを参照し...
-
MovieClipLoaderの使い方がわか...
-
actionScript3.0にて外部xmlフ...
-
2つのswfをぴったり同時に再生...
-
英語圏向けにFLASHを作っ...
-
ブラウザの更新ボタンで画像を...
-
ActionScript3.0のswf読み込み
-
外部swfで読み込んだ外部txtフ...
-
外部swfの読み込みでnow loa...
-
Googleマップに保存した地点が...
-
サポートされたファイル形式お...
-
個別に違う添付ファイルを付け...
おすすめ情報