バネのサンプル


バネのサンプルを作ってみた。まだまだ手際よく作れない。
物理もなんかあまり覚えてないし、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;
        }
}