• ベストアンサー

フレームアクションについて。

アクションスクリプトで、フレームに直接 i=0; とかく場合と、 this.onLoad = function hoge(){ i = 0; } とかく場合の違いがよくわかりません。 同じなのかなと思い使ってみたら動きませんでした。 フレームの所に書いたら読み込んだときということにならないのでしょうか。お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#35109
noname#35109
回答No.3

#1です。 >> i=0; >> >> とかく場合と、 >> >> this.onLoad = function hoge(){ >> i = 0; >> } >> >> とかく場合の違いがよくわかりません。 と質問されても, #1で書いた通り,「前者は正しい書き方,後者は間違った書き方。」 と答えるしかないのですが,本当の質問の意味は何だろうと考え,勝手に推測しました。 『function で i=0; を定義する場合と,function を使わず i=0; の違いは何か。』 というご質問なのでしょうか。 勝手な質問の解釈で,違っている気もしますが, function を使った場合と使わなかった場合の違いについて書きます。 変数が i 1つだけでは,あまり有り難みがないので,変数は i,j,k の3つであったとします。 また,function も1つだけでは,説明しにくいので hoge1 と hoge2 という2つの function を定義したとします。 また,フレーム数も複数あったとします。 まず,フレーム1のスクリプトです。 ------------------------------------ //hoge1関数の定義 function hoge1() { i = 0; j = 1; k = 2; } //hoge2関数の定義 function hoge2() { i = 5; j = 7; k = 9; } //hoge1関数の実行 this.onLoad = function() { hoge1(); }; ------------------------------------ こう書くと,hoge1 と hoge2 が定義されて, その後に hoge1 が実行されるので, 変数 i,j,k にはそれぞれ, 値 0,1,2 が入ります。 次に,その後の任意のフレームに ------------------------------------ hoge2(); ------------------------------------ と書くと,それだけで hoge2関数が実行されるので,いちいち ------------------------------------ i = 5; j = 7; k = 9; ------------------------------------ と書かなくても,変数 i,j,k にはそれぞれ, 値 5,7,9 が入ります。 でもまだ,これだけではまだ有り難みがありません。 しかし,さらにその後の任意のフレームに ------------------------------------ hoge1(); ------------------------------------ と書くとそのフレームでまた, 変数 i,j,k にはそれぞれ, 値 0,1,2 が入ります。 こういう風に,何度も同じメソッドや変数への値の代入などが繰り返される場合に function で定義しておくと便利です。 これが,『function で i=0; を定義する場合と,function を使わず i=0; の違いは何か。』 についての説明です。 また,上のように hoge1(); や hoge2(); を書くだけで,それぞれの関数が実行されるなら, 1フレーム目で, this.onLoad = function() を使わずに, ------------------------------------ function hoge1() { i = 0; j = 1; k = 2; } function hoge2() { i = 5; j = 7; k = 9; } hoge1(); ------------------------------------ と書いても同じではないか。違いはどこにあるのか。 と思われるかもしれませんが, this.onLoad = function() は文字通り,「ロード(表示)されたときに実行」 ということになります。 もし,ムービーが複数フレームあって,またフレーム1に戻ったとき, ------------------------------------ this.onLoad = function() { hoge1(); }; ------------------------------------ と書いてあった場合では,hoge1 は実行されません。 ------------------------------------ hoge1(); ------------------------------------ だと,フレーム1に戻るたびに何度も実行されます。 フレーム1が最初に表示されたときのみ,hoge1 を実行させたい場合は, this.onLoad = function() を使って書けば,その意味が出てくるということになります。 あと,this.onLoad = function() はフレーム1に書いたときだけ有効で,フレーム2以降に書いても何も実行されません。 しかし実際は, _root のタイムラインで this.onLoad = function() を使って書くことはほとんどないと思います。 this.onLoad = function() は,本当は MovieClip.onLoadイベントハンドラメソッド です。 _root だとムービークリップのインスタンス名がありませんから,this という相対パスでメインムービーのことをムービークリップ扱いにして書いているものです。 this.onLoad = function() は _root ではなく,ムービークリップ中のタイムラインの フレーム1 に書くとリンケージから呼び出したときに限って,少しは意味が出てくるのかもしれません。 ムービークリップの onClipEvent()イベントハンドラ の中の1つである onClipEvent (load) のフレーム使用バージョンととらえると良いと思います。 また,ここ↓には http://www.fumiononaka.com/TechNotes/Flash/FN0503003.html メインタイムラインの第1フレームで_level0(_root)に設定したMovieClip.onLoadイベントハンドラメソッドは、呼出されるようです。 しかし、ブラウザで確認すると、MozillaベースのブラウザやSafariでは呼出されないという報告がされています(Flash Player 7)。 とも書かれてありますし,なるべく使用しない方が良いと思います。

muxic
質問者

お礼

ありがとうございます、質問の内容、ご指摘どおりです(苦笑)。 たいへんわかりやすかったです。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • perse
  • ベストアンサー率74% (113/152)
回答No.2

同じフレームに i = 0; と書くのと function hoge() {  i = 0; } と書くのには違いはありません。 しかし function hoge() {  var i:Number = 1; } と書くと変数iはローカル変数として宣言されているので 関数hoge内でしか使えません。 hoge関数外でtrace(i)としてもundefinedが返ってきます。

全文を見る
すると、全ての回答が全文表示されます。
noname#35109
noname#35109
回答No.1

this.onLoad = function hoge(){ i = 0; } これををフレームに書くと, バージョンによってエラーメッセージが違うかもしれませんが, ------------------------------------- **エラー** シーン = シーン 1, レイヤー = レイヤー 1, フレーム = 1 :行 1:ここでは関数の宣言は許可されていません。 this.onLoad = function hoge(){ ActionScript エラー数 :1 報告済みエラー :1 ------------------------------------- などとエラーが出て受け付けませんよ。 i=0; で済むことをなんで凝った文にしたいのかがよくわかりませんが, ------------------------- this.onLoad = function() { i = 0; }; ------------------------- とか, ------------------------- function hoge() { i = 0; } this.onLoad = function() { hoge(); }; ------------------------- ならできると思います。 すごく回りくどい i=0 ですが。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • アクションスクリプト 

    下記のアクションスクリプトで徐々に目標値へ近づけたいのですが、 うまくいきません。 わかる方よろしくお願いします! btn.onRollOver = function() { clearInterval(myID); for (var i:Number = 1; i<=Max; i++) { if (this.id != i) _root["btn"+i].thumb._y = 0 _root["btn"+i].name_txt._y = 20; _root["btn"+i].frame_mc._y = -2; _root["btn"+i].frame_mc.transform.colorTransform = downColor; } else { this.thumb._y = -5 this.name_txt._y = 15              this.frame_mc._y = -6 } }

    • ベストアンサー
    • Flash
  • アクションフレームについて

    Flash MX Professional 2004を使っています。 アクションフレームがスクリプトを記入する場所だと思うのですが、小さすぎてとても不便に思っています。 Flash MX Professional 2004にはスクリプトを記入するエディタ等は無いんでしょうか。 Flash MX Professional 2004内臓のエディタがない場合皆さんはどのような環境でスクリプトを書いていますか。 初歩的なことかもしれませんが困っています。 教えてください。

    • ベストアンサー
    • Flash
  • javascriptからframeへの出力方法

    <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN' 'http://www.w3.org/TR/html4/strict.dtd'> <html> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="prototype.js"></script> <script type="text/javascript"> function init(){ $("f1").innerHTML = "hoge"; $("f2").innerHTML = "piyo"; } </script> </head> <frameset cols="50%,*" onload="init()" > <frame id="f1"> <frame id="f2"> </frameset> </body> </html> 上記、二つに分けたフレームにそれぞれ"hoge"と"piyo"と表示したいのですが出来ません。フレームにjavascriptからアクセスするにはどうしたらよいですか?

  • アクションスクリプト ifがうまく働いてくれません…

    こんにちは。 FLASH8、OSwinXP、初心者 です。 アクションスクリプト「if」に関するご相談です。 ●クリップにマウスオン(rollover)するとダイナミックテキスト(_root.texbox_mc.hhh)の数字がカウントダウンされる、というものを作っています。 ★問題は、以下のスクリプトだとカウントダウンを50で止めたいのにスルーしてどこまでもカウントダウンしてしまい、 onClipEvent (load) { hoge = 1; snt = 100; } on (rollOver) { this.onEnterFrame = function() { hoge -= 1; cont = (snt+hoge); _root.texbox_mc.hhh = cont; //(1) if (cont<50) { cont = 50; } } } ★以下のスクリプトだとカウントダウンが50で止まるんですが、マウスオン(rollover)した瞬間、undefined未定義と表示されてから100が表示され、カウントダウンという展開になってしまいます…100からダウンしてくれたらいいんですが…。 onClipEvent (load) { hoge = 1; snt = 100; } on (rollOver) { this.onEnterFrame = function() { _root.texbox_mc.hhh = cont; //←(1)をここに上げるとifは効くが、undefinedが表示されてしまう hoge -= 1; cont = (snt+hoge); if (cont<50) { cont = 50; } } } ☆つまりはundefinedが出ないで100から始まり、50で止まってくれればいいんですが…。 どなたか教えてくださいませ。 前出があるかと検索しても出てきませんでしたが、これに類似したものでもよいのでページ等教えていただければ幸いです。

  • onloadイベント発火条件

    window.onload <body onload="function(){}"> <img src="hoge.jpg" onload="function(){}"> <script src="hoge" onload="funct" でも <div>や<p>ではonloadイベントは無いですよね? どういう場合にonloadイベントは発火するんでしょうか? window , body ,その他srcがあるdom でしょうか? ブラウザ依存もあるでしょうが、仕様的なものはどうなってますでしょうか?

  • コンストラクタとプロトタイプについて

    ネットで検索したりして調べているのですがいまいちわからなかった箇所が あるので質問させていただきます。 コンストラクタで設定するのとプロトタイプで設定する違いがいまいちわかりません。 例えば function Test { this.prop = hoge; } Test.prototype.prop1 = hogehoge; の場合 コンストラクタのほうが優先されてhogeがでるのはわかるのですが 下記の場合はプロタイプのほうが優先されてhogehogeと出てしまうのは どうしてでしょうか? <script language="javascript"> <!-- //コンストラクタ function Test(){alert("hoge"); } //prototypeでセット Test.prototype=alert("hogehoge"); //オブジェクト作成 var TEST = new Test(); window.onload=TEST; --> </script>

  • 移動に関するアクションスクリプトがわかりません

    あるムービークリップをクリックした時にX座標を0の位置にもっていきたいのですが、アクションスクリプトをどう書いたら良いのか分かりません。 瞬間的に移動するのではなくスーッという感じで動かしたいのです。 on (release){ this._x = 0} と onClipEvent(enterframe){ this._x += -2 } これを融合させたような感じにしたいのですが、書き方が分かりません。メインのタイムラインに動くフレームをつくりgotoAndPlay()で飛ばしても良いんですが、アクションスクリプトだけで作ることは不可能でしょうか?

    • ベストアンサー
    • Flash
  • 複数の要素を表示してる時だけアクションを。

    <div style="display:block" class="diva">hoge</div> <div style="display:block" class="divb">hoge</div> .divaのみ表示している場合は下記で問題ないのですが、 <script type="text/javascript"> $(function(){ if($('.diva').is(':visible')) { //action } }); </script> .diva と .divb の両方がdisplay:blockだった時のみ アクションさせたい時の条件式はどのようになるのでしょうか?

  • イベントハンドラに処理を追加するには?

    例えばbodyタグのonloadイベントハンドラに JavaScriptを使って処理を追加するにはどうすればよいのでしょうか? 例) ・rei.htm <html>  <script language="JavaScript" type="text/javascript">  function hoge(){   alert("hogeです");  }  function foo(){   alert("fooです");  }  </script>  <body onload="hoge();">  </body>  <script language="JavaScript" type="text/javascript">  document.body.onload += foo();  </script> <html> ※前提条件として、変更可能な箇所はscriptタグ内のみとなります。 「こんなんでいけないかな?」と思って上記のようにやってみたのですがうまくいきませんでした。 (結果はfoo()のみ実行され、hoge()は実行されませんでした。 alertでbody.onloadの中身を確認すると『function anonymous{hoge();}undefined』と表示されるので、なぜfoo()が実行されてhoge()が実行されないのかよくわかりませんが‥) また試しに document.body.onload += foo(); これを以下のように変更してみました。 document.body.onload = foo(); この時は、 ・foo()の実行  ↓ ・javascriptエラー  ↓ ・hoge()の実行 となりました。(これもなぜこうなるのかよくわかりせん) 以上、イベントハンドラに最初から任意に入れられている処理を残しつつ、 さらに処理を加えるにはどうすればよいのかご教示お願いします。

  • window.onloadでのfunction

    javascript初心者で質問自身が僕が解決したい問題の原因かどうかも解らずに質問しています。 <script type="text/javascript"> <!-- function hoge_1() { ~処理1~ } function hoge_2(hiki_suu) { ~処理2~ } window.onload = function() { document.getElementById("button_1").onclock = hoge_1; document.getElementById("button_2").onclock = hoge_2("watasu"); } // --> </script> 上記のようにページheadにscriptを配置したとします。ページ上のbutton_1がクリックされると処理1が実行されるのですが、hoge_2のように引数を使ってしまうと、onload時に処理2を実行してしまい、button_2は有効に動作しません。 functionの引数の問題なのか、window.onloadの作法なのか、なにが悪いのか全く解らず質問しています。 ご指導のほどよろしくお願いいたします。