• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:AS3.0に書き換えたいです)

AS3.0でのインスタンス移動プログラムの書き換え方法について

このQ&Aのポイント
  • AS3.0で使いまわしたいAS2.0のインスタンス移動プログラムがエラーになってしまっています。
  • 参考書を買って勉強していますが、AS3.0の学習に時間がかかっています。
  • 初歩的な質問ですが、AS3.0でのインスタンス移動プログラムの書き換え方法を教えていただけますか?

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.4

#1~3です。 FLA 拝見しました。 なるほど,そういう状況でしたか。 同じムービークリップインスタンス内で 順次「右へ」とか「左へ」とか「止まれ」を実行させるわけですね。 その状態であれば, this.addEventListener(Event.ENTER_FRAME, moveRandom); とか this.addEventListener(Event.ENTER_FRAME, moveRandom2); とか this.addEventListener(Event.ENTER_FRAME, moveRandom3); を解除(削除)しない状態のままで, 次々に次の addEventListener をしているので 各関数の命令が重複してしまって動作がおかしくなっているのです。 各それぞれの this.addEventListener(Event.ENTER_FRAME, moveRandom○); が不要になるタイミングは ムービークリップ内の各ブロックの最終フレーム(31,62,90)ですよね? その辺で removeEventListener しておかないと どんどん動作が重複していってしまいます。 例えば ムービークリップ内の フレーム31 には 次のように書かれていますが gotoAndPlay(1); ここを次のようにします。 this.removeEventListener(Event.ENTER_FRAME, moveRandom); gotoAndPlay(1); ムービークリップ内の フレーム62 も同様に 次のようにします。 this.removeEventListener(Event.ENTER_FRAME, moveRandom2); gotoAndPlay(1); ムービークリップ内の 最終フレーム の場合は 次のようにします。 this.removeEventListener(Event.ENTER_FRAME, moveRandom3); Math.floor(Math.random()*5)+1; if (dice == 1) { gotoAndPlay(63); }…以下略… こうすれば それまでに動いている ENTER_FRAME動作 が削除されるので 動作の重複がなくなります。 「イベントリスナーを取り除く removeEventListener() - ActionScript 3.0入門ノート CS4」 http://oshige.com/flash/as3note_cs4/2009/09/-removeeventlistener.html 「FlashゲームPG講座 For AS3.0【EventDispatcher クラスについて】」 http://hakuhin.jp/as3/event.html#EVENT_02

yuta88888
質問者

お礼

返事が遅くなり大変失礼しました。 おかげさまで動きました。 本当に、本当にありがとうございました。 これからも、もっともっと勉強して いきたいと思います。 私の勉強不足が引き起こした問題に お時間を割いていただき本当にありがとうございました。 このことは生涯忘れません。 ありがとうございました。

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

その他の回答 (3)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.3

すみません#2です。 書き間違えました。 (というか+-の見間違いをしてました。) #2では > 補足で書かれていらっしゃる > >> //左に移動 >> this.onEnterFrame = function() { >> _y += Math.floor(Math.random()*3)-1; >> _x += Math.floor(Math.random()*5)-3; >> }; > >これは変ではないですか? と書きましたがこれは間違いです。 変ではなく合ってます。 したがって このスクリプトを AS3 にすると 次のようになります。 //----------------------------- //毎フレーム時間で 関数「moveRandom」を実行 this.addEventListener(Event.ENTER_FRAME, moveRandom); //関数「moveRandom」の定義 function moveRandom(e:Event):void { y+=Math.floor(Math.random()*3)-1; x+=Math.floor(Math.random()*5)-3; } //-----------------------------

yuta88888
質問者

お礼

何度もややこしい事をいって申し訳御座いません。 色々やってみたのですが、上手い事いかないので、 ファイルをアップしてみました。 問題なければ見ていただきたいです [test.fla]というファイルです http://firestorage.jp/download/ffd80aaf1dc06a171f396e0f2de6ac227a6fd395

すると、全ての回答が全文表示されます。
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#1です。 お礼で書かれていらっしゃる > //左に移動 > this.onEnterFrame = function() { > _y += Math.floor(Math.random()*3)-1; > _x += Math.floor(Math.random()*5)-3; > }; これは変ではないですか? //右に移動 の逆パターンにするのであれば //左に移動 this.onEnterFrame = function() { _y += Math.floor(Math.random()*3)-1; _x += Math.floor(Math.random()*5)-1; }; になると思います。 というわけで そうする場合の AS3 バージョンは次のようになります。 //------------------------------- //毎フレーム時間で 関数「moveRandom」を実行 this.addEventListener(Event.ENTER_FRAME, moveRandom); //関数「moveRandom」の定義 function moveRandom(e:Event):void { y-=Math.floor(Math.random()*3)-1; x-=Math.floor(Math.random()*5)-1; } //------------------------------- したがって同様に //ランダム移動中に動きを止める の AS3 バージョンの場合は次のようになります。 //------------------------------- //毎フレーム時間で 関数「moveRandom」を実行 this.addEventListener(Event.ENTER_FRAME, moveRandom); //関数「moveRandom」の定義 function moveRandom(e:Event):void { y-=Math.floor(Math.random()*0)-0; x-=Math.floor(Math.random()*0)-0; } //------------------------------- もっとも↑これだと 結局何も書かないのと同じ動きになりますけどね。

すると、全ての回答が全文表示されます。
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

状況を何も書かれていませんが 書かれていらっしゃるスクリプトは ムービークリップ内のフレームに書かれていたスクリプトですよね? そうだとするなら 同じ場所に次のように書けば同じように動くようになると思います。 //-------------------------------------------- //毎フレーム時間ごとに 関数「moveRandom」を実行 this.addEventListener(Event.ENTER_FRAME, moveRandom); //関数「moveRandom」の定義 function moveRandom(e:Event):void { y-=Math.floor(Math.random()*3)-1; x-=Math.floor(Math.random()*5)-3; } //--------------------------------------------

yuta88888
質問者

お礼

お早い返事ありがとうございます。 無事に動きました。 さっき質問の時に書き忘れていたのですが、 この動きの左バージョンとその場で止まるバージョンも 作りたいのですが、左向きだと座標だけ変えても 無理なんでしょうか? さっき頂いたスクリプトでためさせていただいたのですが、 左方向にはいかず、右に移動してしまいます。 止まるモーションも同じように右に行ってしまいます AS2.0の時はこの様に書いてました それぞれに対応したムービークリップを作り //右に移動 this.onEnterFrame = function() { _y -= Math.floor(Math.random()*3)-1; _x -= Math.floor(Math.random()*5)-3; }; //左に移動 this.onEnterFrame = function() { _y += Math.floor(Math.random()*3)-1; _x += Math.floor(Math.random()*5)-3; }; //ランダム移動中に動きを止める this.onEnterFrame = function() { _y += Math.floor(Math.random()*0)-0; _x += Math.floor(Math.random()*0)-0; }; AS3.0のスクリプトはムービークリップのタイムラインに スクリプト用のレイヤーを作り書いてます 質問ばかりで申し訳御座いません

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

関連するQ&A