バネのサンプル
バネのサンプルを作ってみた。まだまだ手際よく作れない。
物理もなんかあまり覚えてないし、X軸とY軸の向きが逆だからわかりずらい。
全然できてないけど、もう寝る時間だからソースコードを貼付けて寝ちゃおう
package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; public class Study08Spring extends Sprite { private var balls:Array; private var g:Number = 9.8; private var k:Number = 0.3; private var len:Number = 10; public function Study08Spring() { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; balls = []; for (var i:int = 0; i < 5; i++) { var ball:Ball = new Ball(0, generateRandom(10), generateRandom(5)); ball.x = i * 25 + 10; balls.push(ball); addChild(ball); } ball.addEventListener(Event.ENTER_FRAME, onEnterFrame); } private function onEnterFrame(event:Event):void { graphics.clear(); for each(var ball:Ball in balls) { var overLength:Number = ball.y - mouseY; if (Math.abs(overLength) > len) { ball.vy -= k * overLength / ball.m; } ball.vy += g; ball.vy *= 0.95; ball.y += ball.vy; graphics.lineStyle(1, 0x000000); graphics.moveTo(ball.x, 0); graphics.lineTo(ball.x, ball.y - ball.height / 2); } } private function generateRandom(i:int):int { return Math.floor(Math.random() * i) + 1; } } } import flash.display.Shape; class Ball extends Shape { private var _vx:Number; private var _vy:Number; private var _m:Number; public function Ball(vx:Number, vy:Number, m:Number) { _vx = vx; _vy = vy; _m = m; graphics.beginFill(0x00ff00); graphics.drawCircle(0, 0, 10); graphics.endFill(); } public function get vx():Number { return _vx; } public function set vx(vx:Number):void { _vx = vx; } public function get vy():Number { return _vy; } public function set vy(vy:Number):void { _vy = vy; } public function get m():Number { return _m; } public function set m(m:Number):void { _m = m; } }