セグメントを描画:IK drag (1) _wonder forked:4favorite:1lines:47license : MIT License modified : 2010-06-26 14:43:56 Embed Tweet package { import flash.display.Sprite; import flash.events.Event; public class InverseKinematics extends Sprite { private var seg0:Segment; public function InverseKinematics() { init(); } private function init():void { seg0 = new Segment(100, 20); addChild( seg0 ); seg0.x = stage.stageWidth / 2; seg0.y = stage.stageHeight / 2; } } } import flash.display.Sprite; import flash.geom.Point; class Segment extends Sprite { private var color:uint; private var segmentWidth:Number; private var segmentHeight:Number; public var vx:Number = 0; public var vy:Number = 0; public function Segment(segmentWidth:Number,segmentHeight:Number,color:uint=0xffffff){ this.segmentWidth = segmentWidth; this.segmentHeight = segmentHeight; this.color = color; init(); } public function init():void { //セグメントの描画 graphics.lineStyle( 0 ); graphics.beginFill( color ); graphics.drawRoundRect( -segmentHeight / 2, -segmentHeight / 2, segmentWidth+segmentHeight, segmentHeight, segmentHeight, segmentHeight ); graphics.endFill(); //ピン graphics.drawCircle( 0, 0, 2 ); graphics.lineStyle( 0, 0xcc0000 ); graphics.beginFill( 0xcc0000 ); graphics.drawCircle( segmentWidth, 0, 2 ); } public function getPin():Point { var angle:Number = rotation * Math.PI / 180; var xPos:Number = x + Math.cos( angle ) * segmentWidth; var yPos:Number = y + Math.sin( angle ) * segmentWidth; return new Point( xPos, yPos ); } } Code Fullscreen Preview Fullscreen atsu ik rotation Point Math.cos addChild Math.sin Math.PI uint Sprite Number sort new page view favorite forked pv66 forked from: セグメントを描画:IK drag .. k3sugimoto forked:0 favorite:0lines:47 (diff:1) pv241 余弦定理を使う:IK reach (6) _wonder forked:0 favorite:1lines:68 (diff:30) tag: ik pv641 リーチの仕組み:IK reach (2) _wonder forked:1 favorite:0lines:115 (diff:101) tag: ik reach pv1189 セグメントをマウスに向ける:IK drag (2) _wonder forked:2 favorite:0lines:54 (diff:11) tag: ik