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

flash 8 basic 試用版で勉強中です。

メインのタイムラインの1シーン1フレーム1行目に
var a:Number = 0;
があるとします。
1フレームのこれ以降の行や2フレーム以降で a に値を代入します。a をC言語などで言えばグローバル変数のように使用しているイメージです。

2フレーム以降でさまざまな条件を満たしたら(例えばゲームオーバーになったとか)、最初の画面、つまり1フレーム目に gotoAndStop() などで戻るようにしています。この時、1フレーム目に戻っても、a に保持している値は1フレームに戻る前の値を持っていたいのですが、これが出来ません。上に書いた 1行目の行が処理されてa に 0 が入ってしまいます。

これを回避するために、変数定義と初期化の行だけ1フレーム目に書いて、実際に絵などが書いてあり、処理の行が書いてある部分を2フレーム目以降にしています。そして、最初に戻る処理をしたい時、実際には2フレームに戻るという処理にしているのですが、なんかイケてない気がします。

これと同等の内容を通常はどうやってやるのでしょうか。#initclip というのが使えそうかな、と思ったのですが、これは Movieclip にしか使えないとヘルプに書いてあります。メインのタイムラインも Movieclip の親玉みたいなものかなと思ってやってみたのですが駄目でした。

やっぱり1フレーム目に戻る処理をした時点で1フレーム目に書いてあることは全て実行されるのでしょうか。(当たり前といえば当たり前な気もするけど)

flash ならではのやり方があるのか、私が簡単なことに気付いていないだけでしょうか。

ゼビウスなどで言えば1フレーム目はタイトルとメニューの画面で、a はハイスコアを持っているのと同等な感じです。まだ1回もゲームをやっていない時は 0 でよいが、1回終わって戻ってきた時はハイスコアなどの値を持っていたいのです。お願いします。

A 回答 (1件)

私は,こんな↓感じにしています。



--------------------------
var a:Number;
trace(a); //←本当は不要
if (a == undefined) {
a = 0;
}
trace(a); //←本当は不要
--------------------------


 trace(a); //←本当は不要
この行は本当に不要で,
この回答のためにだけ書いた,ムービープレビュー用のアクションです。


Flash MX(Flash Player 6 )までの場合,
未定義の変数の値は, 0 もしくは ""(空文字列) に勝手になっていたので,
ご質問の件は全然苦労しませんでした。

しかし,
Flash MX 2004(Flash Player 7)以降は,
未定義の変数の値は undefined になるので,
質問者さまと同じように,
フレーム1 を何度も通過しないように,
フレーム2 以上でフレーム移動させるか,上のような式を使っています。


正式にはどうすべきかはよくわかりません。
この回答は単なる参考程度にしてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。if ( a == undefined ) なんて出来たのですね。これには気付いていませんでした。この書き方なら許容範囲内です。今の時点ではこの方法でやるしか仕方がないのかもしれません。またはやはり1フレーム目にはプログラムだけ書いて実質的には2フレームから内容を書く方式ですね。もともとflashはアニメーション作成ソフトであることを考えると、絵のないフレームを作成したり、プログラム上で必要な goto のラベル名をつけるためだけにフレームを作成するのはどうも違和感があったのですが、仕方がないのかもしれません。

お礼日時:2006/10/12 04:18

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