• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ActonScriptでムービークリップの移動)

ActonScriptでムービークリップの移動

このQ&Aのポイント
  • ActonScriptでムービークリップの移動をするための記述方法がわかりません。
  • ムービークリップのx座標が300を超えたら-10、0未満になったら+10する処理をしたい。
  • 記述したコードでは一方向にしか進まない問題が発生しています。

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

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

まずは、this._x -=10; しか認識されない原因ですが。 「変数 a の中身が1であるかどうか」を判断する条件は、  if( a == 1 ) このようにイコールを2つ続けて書きます。 if 文は、( ) の中の演算の結果が0以外の時に真(条件成立)、0の時に偽(条件不成立)となります。 a = 1 とすると、変数 a に1を入れた結果の a の値が、if 文の条件として評価されます。 つまり、a に1を代入するという条件では、a に入った値を条件として評価した結果、非0なので真と判断されるため、this._x -=10; は、座標から設定した a の値に関係なく必ず実行されるというわけです。 移動の方向が変わるような動きを付ける場合は、必ず、最初の方向なり速度なりを設定しましょう。 ムービークリップを普通にステージに置いた時は、X座標がはじめから0未満および 300 を超えているとは限りません。 この状況では最初の if 文も実行されないので、変数 a は未定義のままとなり、ムービークリップが全く動かないという状態に陥ります。 移動する方向を1や2といった数字で管理するのではなく、どうせなら速度そのものを変数にし、次のようなスクリプトにしてはいかがでしょう。 (↓このスクリプトをコピーして使う場合は、各行頭の全角のスペースを、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります)  /*初期設定*/  onClipEvent(load)  {   //速度を保持:最初は右向きに進む   vx = 10;  }  /*移動処理*/  onClipEvent(enterFrame)  {   //一定の範囲で折り返すようにする   if( this._x > 300 )   {    vx = -10;   }   else if( this._x < 0 )   {    vx = 10;   }   //位置を更新   this._x += vx;  } load イベントは、ムービークリップがステージに登場した時に発生します。普通はその時1度しか発生しないので、この点を利用して、最初の移動の向きと速度を変数に設定します。 普段は enterFrame イベントで座標をチェックし、300 を超えた場合は負の速度に、0未満になった場合は正の速度を設定しておくと、単純に座標に加算するだけで移動の向きが変わります。

kurateru
質問者

お礼

ありがとうございます。コードもすっきりして無事うまくできました

関連するQ&A

専門家に質問してみよう