![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
以下のムービーを作ったのですが動作がおかしいです。
----------------ステージ-------------
| [ボタン] [photo(mc_0とmc_1)] |
-------------------------------------
【ムービーの説明】
load時:photo(mc)がmcPos[-203]の位置に移動
enterframe:ボタンにmouseoverでそれぞれの座標に移動
※photoは同じものを二枚重ねて、それぞれにmc_0とmc_1とインスタンス名をつけて、異なるスピードで移動。「//」で斜めにマスクを作っているので、ひとつの写真が斜めにずれながら移動しているように見える
【おかしな動作】
loading動作してない状態(FlashMXで単にCtrl+Enter)した状態だと再生時に「mcPos」の「-203」にphotoは移動するのですが、loadingを動作させると再生時にphotoが移動しない。ボタンにonRollOverしたときには、ちゃんとそれぞれの座標に移動します。ただ再生時に「mcPos」の「-203」に移動しない。
/---rootの1フレーム目(ローディング)---/
this.stop();
defWidth = bar._width;
if (getBytesLoaded() == getBytesTotal()) {gotoAndStop("start");}
this.onEnterFrame = function(){
per = Math.floor(getBytesLoaded()/getBytesTotal()*100);
loading = "Now Loading..."+per+"%";
bar._width = defWidth*(per/100);
};
/---rootの2フレーム目---/
this.stop();
mc_0.setMask(mask_0);
mc_1.setMask(mask_1);
mcPos=new Array();
mcPos=[-203, -589, -1361, 183, -975, -1747];
this.onLoad=function(){a=0;};
this.onEnterFrame = function(){
mc_0._x += (mcPos[a]-mc_0._x)/1.4;
mc_1._x += (mcPos[a]-mc_1._x)/2;
};
/---rootの2フレーム目(インターフェイス)---/
ボタン(mc)の編集画面
on(rollOver){_root.a = 0;gotoAndStop("top");}
on(rollOut){gotoAndStop("out");}
on (release, releaseOutside){getURL("index.html");}
No.1ベストアンサー
- 回答日時:
おそらく、変数 a を _root の load イベントを使って初期化していることが原因だと思います。
確かに _root もムービークリップですから、メインのタイムラインで this.onLoad = function()・・・と書いても文法上は間違いではありませんが、_root での load イベントは意外にアテにならない(ダウンロード時には onLoad で定義した関数が呼び出されない)ものなので、変数の初期化に使うのはオススメしません。
フレーム2では、 onEnterFrame イベントを使って
mc_0._x += (mcPos[a]-mc_0._x)/1.4;
mc_1._x += (mcPos[a]-mc_1._x)/2;
と、a を使って配列変数を参照する処理を定義していらっしゃるようですが。
参照しようとした変数が定義されていない場合は、undefined という値が返されます。
undefined は Flash の内部では0が割り当てられており、Flash Player 6 までは未定義の変数の値は0として処理されていました。
しかし、Flash Player 7(作成ツールは Flash MX 2004 )では undefined の解釈が変更され、0とは見なされなくなりました。変数に明示的に初期値を入れない限り、変数を使った演算は正常に行われません。
つまり、
this.onLoad=function(){a=0;};
で定義した関数が呼び出されていないと、変数 a は初期化されず、未定義 = undefined となります。
a を参照して配列変数から値を取ってこようとしても、a という変数は存在しないことになっているので、値の取得に失敗してしまうというわけです。
ムービー再生中、本当に最初の1度だけ変数を初期化したいのであれば、この undefined を利用して
if( a == undefined )
{
a = 0;
}
(↑各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)
このようなスクリプトで初期化できます。
ご質問文の例ですと、フレーム2で、this.onLoad =・・・の代わりに使ってみてください。
後で gotoAndPlay などでフレーム2が再度再生されることがあっても、この時には変数 a は既に存在していて undefined ではありませんから、if 文の条件が不成立になり、a = 0; は実行されません。
フレーム2が2度と再生されないか、あるいは、フレーム2に戻るたびに0になっても問題がないのであれば、undefined かどうかで判断しなくても、単に a = 0; として初期化しても構いません。
ちなみに、未定義の変数を算術演算に利用すると、似たような不具合が起こることがあります。
未定義の変数で、例えば a++; といった計算をすると、結果は NaN (数値ではないもの)という値になります。
算術演算に利用する場合は特に、変数の初期化は大切です。フレームアクションなどの確実に初期化できる方法で、明示的に初期値を入れてから利用するようにしましょう。
変数を利用した演算で、全く動作しないといった不可解なことが起きたら、変数や演算の結果が undefined か NaN になっていないかどうかを疑ってみてください。
変数の値は、trace アクションを使って
trace( a );
として「出力」パネルに表示するか、デバッガという機能を使って確認できます。
ありがとうございます。
ばっちり動作しましたっ!!
いや~、ちょっと本を見て勉強したぐらいだとなかなか上手くいかないっすね~~!!
もっともっと勉強せねばかな。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- 物理学 E=MC二乗 C=299792458m C二乗= 299792458X299792458= 8987 9 2022/08/10 09:33
- デスクトップパソコン 動画編集で使うデスクトップで今から5年使えるパソコンスペックってどんなのですか?ドスパラで考えていま 5 2023/01/08 12:26
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- スピーカー・コンポ・ステレオ MCカートリッジのオススメを教えてください。 お時間割いてくださりありがとうございます。 当方、現在 10 2022/07/04 14:20
- JavaScript javascriptで変数を組み込みたい 2 2023/01/13 09:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
arduino プログラムについて
-
potplayerについて質問です
-
FLASHでゲームを作っていた人は...
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
-
ダウンロードしたデジブックはa...
-
ad or script について
-
Flashplayerの運用について
-
VBAのコンボボックスの年月表示...
-
Adobe Flash Player
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
三角形ABCのBを可変にしたい
-
外部ムービー読込み後 AS が...
-
Flash ドラック&ドロップ 色の...
-
paraflaのアクションスクリプト...
-
mcのスクロール
-
AS3.0でムービークリップ制御
-
FlashのMCに複数の動作を...
-
Flash lite 1.1で待受け作成
-
ムービークリップを1コマ飛し...
-
【AS3.0】Timerとタイムライン
-
FLASH LITE1.1 制限時間を任意...
-
オンマウスでモーションを停止...
-
関数を順番に実行したい AS3
-
FLASHの同一タイムラインで、複...
-
actionscript3.0で親階層にある...
-
AS3でムービークリップ再生・早...
-
as3.0でのフレーム移動制御のス...
-
AS3.0でComboBox
-
フレーム内に移動したい
-
【C#】wavファイルの複数同時再生
おすすめ情報