接触する円と線

by yuugurenote
マウスを画面左右に動かすと線がそれぞれ動きます。
円はStageの外に出ると上からまた降ってきます。
♥0 | Line 111 | Modified 2011-07-31 11:03:00 | MIT License
play

ActionScript3 source code

/**
 * Copyright yuugurenote ( http://wonderfl.net/user/yuugurenote )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/v720
 */

package {
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.geom.Rectangle;
    import flash.display.DisplayObject;
    [SWF(width=465,height=465,backgroundColor=0xFFFFFF,frameRate=60)]

    public class Main110731_01 extends Sprite {
        public var sw:Number=stage.stageWidth;
        public var sh:Number=stage.stageHeight;

        private var myGravity:Number=0.1;
        private var myBounce:Number=-0.5;

        private var _myCircle:myCircle;
        private var _myTriangle:myTriangle;
        private var _myLine:myLine;

        public function Main110731_01() {

            //三角形を配置
            _myTriangle=new myTriangle  ;
            _myTriangle.x=sw/2;
            _myTriangle.y=sh-130;
            addChild(_myTriangle);

            //ラインを配置
            _myLine=new myLine  ;
            _myLine.x=sw/2;
            _myLine.y=sh-130;
            stage.addChild(_myLine);

            //円を配置
            _myCircle=new myCircle  ;
            _myCircle.x=sw/2;
            _myCircle.y=100;
            addChild(_myCircle);

            addEventListener(Event.ENTER_FRAME,xEnter);

        }
        private function xEnter(e:Event):void {
            _myLine.moveLine();

            _myCircle.vy+=myGravity;
            _myCircle.x+=_myCircle.vx;
            _myCircle.y+=_myCircle.vy;

            if (_myCircle.y>sh) {
                _myCircle.y=100;
                _myCircle.x=sw/2;
                _myCircle.vx=0;
                _myCircle.vy=0;

            }

            var myBound:Rectangle=_myLine.getBounds(this);
            if (_myCircle.x>myBound.left&&_myCircle.x<myBound.right) {

                var angle:Number=_myLine.rotation*Math.PI/180;
                var cos:Number=Math.cos(angle);
                var sin:Number=Math.sin(angle);

                var x1:Number=_myCircle.x-_myLine.x;
                var y1:Number=_myCircle.y-_myLine.y;
                var y2:Number=cos*y1-sin*x1;


                if (y2>- _myCircle.height/2) {
                    var x2:Number=cos*x1+sin*y1;

                    var vx1:Number=cos*_myCircle.vx+sin*_myCircle.vy;
                    var vy1:Number=cos*_myCircle.vy-sin*_myCircle.vx;

                    y2=- _myCircle.height/2;
                    vy1*=myBounce;

                    x1=cos*x2-sin*y2;
                    y1=cos*y2+sin*x2;
                    _myCircle.vx=cos*vx1-sin*vy1;
                    _myCircle.vy=cos*vy1+sin*vx1;
                    _myCircle.x=_myLine.x+x1;
                    _myCircle.y=_myLine.y+y1;
                }
            }
        }
    }
}

import flash.display.Sprite;

class myCircle extends Sprite {
    public var radius:Number=10;
    public var speed:Number=1;
    public var r:Number;
    public var vx:Number=0;
    public var vy:Number=0;

    public function myCircle() {
        graphics.beginFill(0xCCCCCC,1);
        graphics.drawCircle(0,0,radius);
        graphics.endFill();
    }
}

class myTriangle extends Sprite {
    public function myTriangle() {
        graphics.lineStyle(1,0xCCCCCC,1);
        graphics.beginFill(0xCCCCCC,1);
        graphics.moveTo(0,0);
        graphics.lineTo(15,26);
        graphics.lineTo(-15,26);
        graphics.lineTo(0,0);
        graphics.endFill();
    }
}

class myLine extends Sprite {

    public function myLine() {
        graphics.lineStyle(1,0x1F1F1F,0.5);
        graphics.moveTo(0,0);
        graphics.lineTo(200,0);
        graphics.lineTo(-200,0);
    }
    public function moveLine():void {
        if (stage.mouseX>stage.stageWidth/2) {
            this.rotation+=1;
            if (this.rotation>=20) {
                this.rotation=20;
            }
        }
        if (stage.mouseX<stage.stageWidth/2) {
            this.rotation-=1;
            if (this.rotation<=-20) {
                this.rotation=-20;
            }
        }
    }
}