反向运动学: 拖拽与伸展

package cn.d
{
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.geom.Point;

public class TwoSegmentResh extends Sprite
{
private var sg1:Segment;
private var sg2:Segment;

private var num:int=20;
private var sglist:Array=[];

public function TwoSegmentResh()
{
super();
stage.scaleMode=StageScaleMode.NO_SCALE;
//stage.align=StageAlign.TOP_LEFT;
init();
}

private function init():void
{

for (var i:int=0; i < num; i++)
{
sg1=new Segment(100, 20);
this.addChild(sg1);
sglist.push(sg1);

}

sglist[0].x=stage.stageWidth / 2;
sglist[0].y=stage.stageHeight / 2;


this.addEventListener(Event.ENTER_FRAME, onEnterFrame)
}

private function onEnterFrame(e:Event):void
{
var targetP:Point=resh(sglist[0], mouseX, mouseY);

for (var i:int=1; i < num; i++)
{
targetP=resh(sglist[i], targetP.x, targetP.y);
}

for (var _i:int=num-1; _i>0; _i--)
{
postion(sglist[_i-1],sglist[_i]);
}
}

private function resh(sg:Segment, _x:Number, _y:Number):Point
{
var dx:Number=_x - sg.x;
var dy:Number=_y - sg.y;

sg.rotation=Math.atan2(dy, dx) * 180 / Math.PI;

var w:Number=sg.getPin().x - sg.x;
var h:Number=sg.getPin().y - sg.y;

return new Point(_x - w, _y - h);
}

private function postion(sgA:Segment, sgB:Segment):void
{
sgA.x=sgB.getPin().x;
sgA.y=sgB.getPin().y;
}


}
}
posted @ 2012-03-26 20:55  ndljava  阅读(200)  评论(0编辑  收藏  举报