- ベストアンサー
ActonScriptでムービークリップの移動
- ActonScriptでムービークリップの移動をするための記述方法がわかりません。
- ムービークリップのx座標が300を超えたら-10、0未満になったら+10する処理をしたい。
- 記述したコードでは一方向にしか進まない問題が発生しています。
- みんなの回答 (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未満になった場合は正の速度を設定しておくと、単純に座標に加算するだけで移動の向きが変わります。
お礼
ありがとうございます。コードもすっきりして無事うまくできました