study090531 練習用として shossho forked:3favorite:6lines:110license : MIT License modified : 2009-05-31 22:14:19 Embed Tweet //練習用として package { import flash.display.Sprite; import flash.events.Event; import flash.geom.Point; [SWF(width = "465", height = "465", frameRate = "60", backgroundColor = "#ffffff")] public class Node extends Sprite { private var particles:Array; private var numParticles:uint = 30; private var minDist:Number = 230; private var springAmount:Number = .0015; public function Node() { init(); } private function init():void { particles = new Array(); for(var i:uint = 0; i<numParticles; i++) { var size:Number = Math.random()*7+3; var particle:Ball = new Ball(size, 0x000000, 0.9); particle.x = Math.random()*stage.stageWidth; particle.y = Math.random()*stage.stageHeight; particle.vx = Math.random()*6-3; particle.vy = Math.random()*6-3; particle.mass = size; addChild(particle); particles.push(particle); } addEventListener(Event.ENTER_FRAME, onEnterFrame); } private function onEnterFrame(event:Event):void { graphics.clear(); for(var i:uint = 0; i<numParticles; i++) { var particle:Ball = particles[i]; particle.x += particle.vx; particle.y += particle.vy; if(particle.x > stage.stageWidth) { particle.x = stage.stageWidth; particle.vx *= -1; }else if(particle.x < 0){ particle.x = 0; particle.vx *= -1; } if(particle.y > stage.stageHeight) { particle.y = stage.stageHeight; particle.vy *= -1; }else if(particle.y < 0){ particle.y = 0; particle.vy *= -1; } } for(i = 0; i<numParticles-1; i++) { var partA:Ball = particles[i]; for(var j:uint = i+1; j<numParticles; j++) { var partB:Ball = particles[j]; spring(partA, partB); } } } private function spring(partA:Ball, partB:Ball):void { var dx:Number = partB.x - partA.x; var dy:Number = partB.y - partA.y; var dist:Number = Math.sqrt(dx*dx + dy*dy); if(dist < minDist) { graphics.lineStyle(1, 0x000000, 1-dist/minDist); graphics.moveTo(partA.x, partA.y); graphics.lineTo(partB.x, partB.y); var ax:Number = dx*springAmount; var ay:Number = dy*springAmount; partA.vx += ax/partA.mass; partA.vy += ay/partA.mass; partB.vx -= ax/partB.mass; partB.vy -= ay/partB.mass; } } } } import flash.display.Sprite; class Ball extends Sprite { public var radius:Number; public var color:uint; public var vx:Number = 0; public var vy:Number = 0; public var mass:Number = 0; public function Ball(radius:Number, color:uint, alpha:Number) { this.radius = radius; this.color = color; this.alpha = alpha; init() } public function init():void { graphics.beginFill(color); graphics.drawCircle(0, 0, radius); graphics.endFill(); } } Code Fullscreen Preview Fullscreen lexanderc xor enjoy_tpm 024t910 narahater : animation _sam : ball-meshmovementbadness animation ball-mesh movement alpha Math.sqrt addEventListener push addChild Event.ENTER_FRAME Array Math.random Event uint Sprite Number sort new page view favorite forked pv77 forked from: study090531 flan forked:0 favorite:0lines:113 (diff:7) pv1363 forked from: study090531 onedayitwillmake forked:3 favorite:19lines:155 (diff:262) tag: ball elastic graphics line mesh pv473 forked from: study090531 hacker_v4337s3u forked:1 favorite:2lines:110 (diff:1) tag: Cluster graph_theory