• 締切済み

繰り返し

両腕・両足があり、下記のコードは回転になっています。 これを、例えば20度から45度へ傾き、またそこから20度に戻る動きを 繰り返すようにさせたいです。 それと、右腕・左足が45度になった時、左腕・右足が動きだし 交互に動きになるようにするにはifで出来るのでしょうか? robo.arm_r.addEventListener(Event.ENTER_FRAME,arm_right); function arm_right(event:Event):void {  robo.arm_r.rotation += 3; } robo.arm_l.addEventListener(Event.ENTER_FRAME,arm_left); function arm_left(event:Event):void {  robo.arm_l.rotation += 3; } robo.leg_r.addEventListener(Event.ENTER_FRAME,leg_right); function leg_right(event:Event):void {  robo.leg_r.rotation += 3; } robo.leg_l.addEventListener(Event.ENTER_FRAME,leg_left); function leg_left(event:Event):void {  robo.leg_l.rotation += 3; }

みんなの回答

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

ムービークリップのrotation値は, そのムービークリップが作成された状態からの角度です。 配置された状態からの角度ではありません。 また rotation の値は -180~180 です。 この範囲を超えると自動計算し直されますが -180や180前後の値を絶対的に操作する場合は少々厄介です。 この辺が絡むとムービークリップの作成のしかたや 配置のしかたによってスクリプトは変わりますが あえて変わらないようにすると次のような感じになると思います。 ただし,向かって右側の手を 「arm_r」 と考えています。 左手・右脚・左脚も同様で 作者から見た左右 としています。 また「20度から45度」の意味がわかりませんでしたので 「『配置した状態から』20度~45度の範囲で動く」 場合を想定しています。 ==================================== //--※ムービープレビュー確認用-- trace (robo.arm_r.rotation); trace (robo.arm_l.rotation); trace (robo.leg_r.rotation); trace (robo.leg_l.rotation); //------------------------- //---初期設定-------------- //最小角を設定 var min_r:Number = 20; //最大角を設定 var max_r:Number = 45; //1フレーム時間で回転する角度を設定 var spd_r = 3; //------------------------- //手足の初期配置角度を保存 var arm_r0 = robo.arm_r.rotation; var arm_l0 = robo.arm_l.rotation; var leg_r0 = robo.leg_r.rotation; var leg_l0 = robo.leg_l.rotation; //手足の回転を配置された状態から最小角に回転 robo.arm_r.rotation = arm_r0 + min_r; robo.arm_l.rotation = arm_l0 - min_r; robo.leg_r.rotation = leg_r0 + min_r; robo.leg_l.rotation = leg_l0 - min_r; //回転させる数値を代入する変数を用意(初期値は最小値) var rot:Number = min_r; //プラスマイナスを決める変数を用意(初期値「+」) var pm:int = 1; //roboに毎フレーム実行するイベントリスナーを追加 robo.addEventListener (Event.ENTER_FRAME,moveArm); //関数moveArmの定義 function moveArm (event:Event):void { rot += pm * spd_r; event.target.arm_r.rotation=arm_r0+rot; event.target.arm_l.rotation=arm_l0-rot; if (rot>max_r) { robo.removeEventListener (Event.ENTER_FRAME,moveArm); robo.addEventListener (Event.ENTER_FRAME,moveAll); } } //関数moveAllの定義 function moveAll (event:Event):void { if (rot>max_r) { pm=-1; } else if (rot<min_r) { pm=1; } rot+=pm*spd_r; event.target.arm_r.rotation=arm_r0+rot; event.target.arm_l.rotation=arm_l0-rot; event.target.leg_r.rotation=leg_r0+(max_r+min_r)-rot; event.target.leg_l.rotation=leg_l0-(max_r+min_r)+rot; } ====================================   

chiko_808
質問者

お礼

BlurFiltan 様 ご丁寧に画像付きで、ご回答頂きましてありがとうございます。 今の私では、到底書けないレベルで読み解くのが困難ですが 勉強になりました。 ありがとうございました。

関連するQ&A