- ベストアンサー
ActionScriptで思うような動きを出せず、困っています
- ActionScriptの学習を始めたばかりで、うまく動きません。
- x座標とy座標を指定し、減速しながら移動する動きを作りたい。
- 初歩的な質問で申し訳ありませんが、助言をお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
最小変更で行くと, 次のようになると思います。 ----------------------------- maru1.Gox = 700; maru1.Goy = 25; flg = false; maru1.onEnterFrame = function() { this._x += (maru1.Gox-this._x)/10; if (this._x>=650) { maru1.Gox = 35; flg = true; } if (flg == true) { this._y += (maru1.Goy-this._y)/10; } }; -------------------------- 単に if(flg = ture) が致命傷なだけだと思います。 「=」 は代入演算子です。 flg が true であるかどうかを判定させるのですから, 「==」 の等価演算子を使う必要があります。 また, 「ture」が綴り間違いで,「true」ですね。 また,if( ){ } は,( ) 内が true であるか false であるかを判定し, ( )内が true であれば,続く中カッコ { } 内のステートメントを実行します。 したがって, if (flg == true) { ~ } と書くのではなく, if (flg) { ~ } と書くのが一般的です。 if (flg == true) と書くと, 「もし flg の値が true であるという条件が true であると…」 という回りくどい判定文となります。 ちなみに, if (flg == false) { ~ } を書きたい場合は, if (!flg) { ~ } となります。 「!」 は論理否定 (NOT) 演算子 です。 あと最初の,onLoad = function() という無意味なものを取りました。
その他の回答 (2)
#1&2です。 onLoad = function について気になったので少し調べてみました。 調べても今ひとつわからないというのが正直なところですが。 しかし,フレームに, ムービークリップ.onLoad = function(){ } を定義するのはやはり通常間違いであるようですよ。 私は,このご質問を見るまで見たことがなかったです。 当然,使ったこともありませんでした。 フレームに書くのではなく, ActionScript 2.0クラス定義ファイル になら書く場合があるとからしいです。 MovieClip.onLoadイベントハンドラメソッド http://www.fumiononaka.com/TechNotes/Flash/FN0503003.html ~引用~ > MovieClipインスタンスを配置したタイムラインに、 > このイベントハンドラメソッドを定義して動作する場合は、 > かなり限定されます。 > 実際上は、タイムラインに定義することはまれで、 > またその定義も適切とはいえない場合が少なくないでしょう。 ---中略--- > メインタイムラインの第1フレームで_level0(_root)に設定した > MovieClip.onLoadイベントハンドラメソッドは、呼出されるようです。 > しかし、ブラウザで確認すると、 > MozillaベースのブラウザやSafariでは呼出されないという > 報告がされています(Flash Player 7)。 その他, 検索してみると,ほんの少しだけのページがヒットしますね。 また,ほんの少しのページのほとんどが,「いつ使う?」とか「使えない!」とかいう論議や論理の場所ばかりのように思えます。 Google検索「MovieClip.onLoad」 http://www.google.co.jp/search?hl=ja&q=MovieClip.onLoad&lr=lang_ja まあ,めったにない場合に使用することがあるらしいです。 そのめったにない場合には私は遭遇したことがありません。 というか, そのめったにない場合というのも,あえてそういう状況を作り出して実験したり論議のネタにしているとしか思えないページばかりが見つかりますね。 通常は使わないのが普通だと思います。
お礼
お礼が遅くなってすみません。 本当に詳しい助言をありがとうございます。 今回、頂いたアドバイス、資料をもとに、 再度、作成に取り組んだところ、以前よりもスムーズかつ着実に作成することができております。 これからもさらに勉強を重ね頑張っていきたいと思います!! また、様々な疑問にぶつかることがあるとは思いますが、 是非助言を頂ければ幸いです。 本当にありがとうございました。
#1です。 > 実際にonLoad = function()を使用するのは > どういったときなのでしょうか? どういうときも使わないでしょう。 ご質問で書かれていらっしゃる onLoad = function() は, ターゲットパスを略した形ですが,省略さずに書くと this が入ります。 (つまり勝手にthisが補完されて動作します。) ---------------------------- this.onLoad = function () { maru1.Gox = 700; maru1.Goy = 25; flg = false; }; ---------------------------- この this は, そのスクリプトを書いたタイムラインの階層を示します。 _root に書いたスクリプトでしたら _root.onLoad という意味になります。 意味不明でしょう。 _root がロードされたとき { } 内を実行。 意味がわかりません。 ですから,普通は使わないと思います。 おそらく, 元々は,フレームに書いたスクリプトではなく,ムービークリップに書いたスクリプトで, そのムービークリップに書いたスクリプトをフレームに並行移植させたからそんな変な書き方になったのではないでしょうか? この場合の onLoad や onEnterFrame は, 元々はムービークリップの onClipEventイベントハンドラ が, Flash MX以降,フレームにも使えるようになったというもの(イベントハンドラメソッド)です。 ですから,MX以降 すごく柔軟にプログラミングできるようになったのです。 ムービークリップのイベントハンドラ http://homepage3.nifty.com/ginga-b/MX/mc_eventhandler.html > イベントハンドラメソッド > イベントハンドラメソッドは、FlashMXで導入された、 > これからの主役となるイベントハンドラです。 > フレームアクションにも記述できるため、 > シンボル共通のハンドラを記述することができます。 フレームに書いたスクリプトを消して, ムービークリップ maru1 を選択して, maru1 自体に次のように書くのなら意味がわかります。 ----------------------------- onClipEvent (load) { Gox = 700; Goy = 25; flg = false; } onClipEvent (enterFrame) { this._x += (Gox-this._x)/10; if (this._x>=650) { Gox = 35; flg = true; } if (flg == true) { this._y += (Goy-this._y)/10; } } ----------------------------- 同じように動作しますよ↑。 // このムービークリップが表示されたとき onClipEvent (load) { // 変数 Gox と Goy を設定 Gox = 700; Goy = 25; // フラグを false にしておく flg = false; } そして,この後に, onClipEvent (enterFrame) { ~ } で1フレーム進む時間ごとに毎回 { ~ } が実行される。 これだと,変でも何でもありませんし,意味もわかります。 これを, そのまま上の階層のフレームに移植しようとすれば, onClipEvent (load) { ~ } ↓変更↓ onLoad = function () { ~ } onClipEvent (enterFrame) { ~ } ↓変更↓ maru1.onEnterFrame = function(){ ~ } に変更してしまいたくなる気持ちもわからなくもありません。 onLoad = function () { ~ } は一応使えますが,一応使えるだけで,意味はないと(私は)思います。
お礼
>>sassakunさん 早速のご回答誠にありがとうございます。 本当に分かりやすいご説明で、trueとfalseの部分の、疑問も解けました!! 早速、ご指定いただいた、箇所を修正致しましたところ、問題は改善されました。 もしよろしければもう一点、質問をさせていたいてもよろしいでしょうか。 onLoad = function()の部分についてなのですが、今回のような場合であれば、 maru1.Gox = 700; maru1.Goy = 25; flg = false; などを定義する場合、onLoad = function()が必要だと間違った解釈をしていたのですが、 実際にonLoad = function()を使用するのはどういったときなのでしょうか? 文章がお粗末な上に、曖昧な質問で申し訳ありまん。 助言を頂ければ幸いです。 どうぞよろしくお願い致します。