Forked from: demouth's forked from: ひも的な何か diff:11 ちりちりな何か demouth forked:2favorite:13lines:110license : MIT License modified : 2009-11-05 00:58:38 Embed Tweet // forked from demouth's forked from: ひも的な何か // forked from demouth's ひも的な何か package { import flash.display.Graphics; import flash.display.Sprite; import flash.display.Stage; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; [SWF(frameRate='60')] public class Main extends Sprite { protected var joints:Vector.<Joint> = new Vector.<Joint>(); protected var fric:Number = 0.01; protected var spring:Number = 0.995;//ばね的なもの? protected var range:int = 10;//前後に影響を与える範囲 protected var num:int = 1; public function Main() { if (this.stage) this.init() else this.addEventListener(Event.ADDED_TO_STAGE , this.init); } protected function init(event:Event = null):void { this.stage.align = StageAlign.TOP_LEFT; this.stage.scaleMode = StageScaleMode.NO_SCALE; this.num = this.stage.stageHeight / 2; this.create(); this.addEventListener(Event.ENTER_FRAME , this.enterFrameHandler); } protected function create():void { var num:Number = this.num; for (var i:int = 0; i < num; i++) { var j:Joint = new Joint(); j.y = i*2; this.joints.push(j); } } private function enterFrameHandler(event:Event):void { this.graphics.clear(); this.calc(); this.move(); this.draw(); } private function calc():void { var l:int = this.joints.length; for (var i:int = 0; i < l; i++) { if (i == 0) { this.joints[0].x = this.stage.mouseX; this.joints[0].y = this.stage.mouseY; continue; } var b:int = this.range; var a:int = this.range; var now:Joint = this.joints[i]; for (var j:int = i-b; j < i+a+1; j++) { if (j >= 0 && l > j && j != i) { var t:Joint = this.joints[j]; var angle:Number = Math.atan2(now.y-t.y, now.x-t.x); now.sx -= Math.cos(angle) * 6; now.sy -= Math.sin(angle) * 6; } } } } private function move():void { var l:int = this.joints.length; for (var i:int = 0; i < l; i++) { var now:Joint = this.joints[i]; if(i!=0)now.sy += 1.5; now.x += now.sx * this.fric; now.y += now.sy * this.fric; if (i == 0) continue; var b:Joint = this.joints[i-1]; var angle:Number = Math.atan2(b.y - now.y, b.x - now.x); now.x = b.x - Math.cos(angle) * 2; now.y = b.y - Math.sin(angle) * 2; now.sx *= this.spring; now.sy *= this.spring; } } private function draw():void { var g:Graphics = this.graphics; var l:int = this.joints.length; for (var i:int = 0; i < l; i++) { g.beginFill(0); g.drawCircle(this.joints[i].x, this.joints[i].y, (i<10)?1:this.joints[i].sx*0.005+1); g.endFill(); } } } } class Joint { public var x:Number = 0; public var y:Number = 0; public var sx:Number = 0; public var sy:Number = 0; } Code Fullscreen Preview Fullscreen sazaam tkinjo paq nki2 alumican_net.. teageek PESakaTFM yasusic esukei sw_lucchini dnddar : ribbon keim_at_Si : 全力でまっすぐにしたい fardeen : corde,ficellecorde, ficelle corde, ficelle ribbon Math.atan2 StageScaleMode.NO_SCALE length Event.ADDED_TO_STAGE Math.cos Math.sin push Event Event.ENTER_FRAME Vector int Number sort new page view favorite forked pv677 forked from: ちりちりな何か demouth forked:0 favorite:15lines:110 (diff:44) pv211 forked from: ちりちりな何か correa_elias forked:0 favorite:1lines:110 (diff:2)