package { import flash.display.Sprite; import flash.events.Event; public class Walking1 extends Sprite { private var segment0:Segment; private var segment1:Segment; private var cycle:Number=0; private var offset:Number = -Math.PI/2;//小腿的运动看上去应该滞后于大腿,所以需要加入反向偏移量 public function Walking1() { init(); trace(Math.PI/180); trace(0.05*180/Math.PI); } private function init():void { segment0=new Segment(100,20); addChild(segment0); segment0.x=200; segment0.y=200; segment1=new Segment(100,20); addChild(segment1); segment1.x=segment0.getPin().x; segment1.y=segment0.getPin().y; addEventListener(Event.ENTER_FRAME,onEnterFrame); } private function onEnterFrame(event:Event):void { cycle+=.05; var angle0:Number=Math.sin(cycle)*45 + 90;//-45到45整体加上90度以后,就变成45到135,即:大腿垂直方向左右摆动45度 var angle1:Number = Math.sin(cycle + offset) * 45 + 45;//即:小腿相对大腿末端做0-90度的正向旋转。建议大家尝试修改一下这里的+45值的大小,看看效果有什么不同 segment0.rotation=angle0; segment1.rotation=segment0.rotation+angle1; segment1.x=segment0.getPin().x; segment1.y=segment0.getPin().y; } } }