In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

とりあえず丸くした forked from: 重い+動作不良

ついでにボールをShape継承にした。
他にもいくつか修正入れたが、壁を毎回描き直しているっぽいのをinit内に移動するのが一番利いた←
Get Adobe Flash player
by felprere 07 Oct 2013

    Talk

    makc3d at 07 Oct 2013 21:26
    See http://wonderfl.net/c/xQ0e? and forks
    dannnn at 04 Nov 2013 13:23
    thanks markc3d
    Embed
/**
 * Copyright felprere ( http://wonderfl.net/user/felprere )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/pggf
 */

// forked from dannnn's 重い+動作不良
package 
{
    import flash.display.Sprite;
    import flash.display.Shape;
    import flash.display.Graphics;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    
    import net.hires.debug.Stats;
    /**
     * ...
     * @author 
     */
    [SWF(width = "465", height = "465", frameRate = "30", backgroundColor="0x000000")]
    public class ball_1 extends Sprite 
    {
        //public var background:Sprite;
        public var N:int  = 10;
        public var xx:int = 0;
        public var yy:int = 1;
        
        public var R:Number = 5.0;
        public var Rr:Number = 10.0;
        
       
       
        public var aa:inte = new inte();
        
        public var line:Sprite = new Sprite();
        private var wall:Shape = new Shape();
        
        private var bm:Vector.<Ball> = new Vector.<Ball>(N, true);
     
        public function ball_1():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);    
        }
        
        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
            this.graphics.beginFill(0x1D4E20,1.0);
            this.graphics.drawRect(0,0,465,465);
            this.graphics.endFill();
            
            bm[0] = new Ball(0xFFFFFF);
            bm[1] = new Ball(0xFFFF00);
            bm[2] = new Ball(0x0000FF);
            bm[3] = new Ball(0xFF0000);
            bm[4] = new Ball(0xFF00FF);
            bm[5] = new Ball(0xFF7F00);
            bm[6] = new Ball(0x00FF00);
            bm[7] = new Ball(0xCC4C33);
            bm[8] = new Ball(0x333333);
            bm[9] = new Ball(0x7F7F00);
            
            addChild( new Stats() );
            
            addChild(bm[0]);
            addChild(bm[1]);
            addChild(bm[2]);
            addChild(bm[3]);
            addChild(bm[4]);
            addChild(bm[5]);
            addChild(bm[6]);
            addChild(bm[7]);
            addChild(bm[8]);
            addChild(bm[9]);
            
            init_a();
            addEventListener(Event.ENTER_FRAME, run_a);
        }
        
        private function init_a():void 
        {
            //intitial posion and velocity
             
            bm[0].x = 116 + 80;    //width/4 statsの横幅70
            bm[0].y = 348;    //width*3/4
            
            bm[1].x = 116 + 80 + Math.random();
            bm[1].y = 116 + Math.random();
            
            bm[2].x = 116 + 80 - 4 * Rr * Math.cos(60 * Math.PI / 180) + Math.random();
            bm[2].y = 116 - 4 * Rr * Math.sin(60 * Math.PI / 180) + Math.random();
            
            bm[3].x = 116 + 80 + Math.random();
            bm[3].y = 116 - 8 * Rr * Math.sin(60 * Math.PI / 180) + Math.random();
            
            bm[4].x = 116  + 80 + 4 * Rr * Math.cos(60 * Math.PI / 180) + Math.random();
            bm[4].y = 116 -4 * Rr * Math.sin(60 * Math.PI / 180) + Math.random();
            
            bm[5].x = 116 + 80 -  2 * Rr * Math.cos(60 * Math.PI / 180) + Math.random();
            bm[5].y = 116 - 2 * Rr * Math.sin(60 * Math.PI / 180) + Math.random();
            
            bm[6].x = 116 + 80 + 2 * Rr * Math.cos(60 * Math.PI / 180) + Math.random();
            bm[6].y = 116 - 2 * Rr * Math.sin(60 * Math.PI / 180) + Math.random();
            
            bm[7].x = 116 + 80 - 2 * Rr * Math.cos(60 * Math.PI / 180) + Math.random();
            bm[7].y = 116 - 6 * Rr * Math.sin(60 * Math.PI / 180) + Math.random();
            
            bm[8].x = 116 + 80 + 2 * Rr * Math.cos(60 * Math.PI / 180) + Math.random();
            bm[8].y = 116 - 6 * Rr * Math.sin(60 * Math.PI / 180) + Math.random();
            
            bm[9].x = 116 + 80 + Math.random();
            bm[9].y = 116 - 4 * Rr * Math.sin(60 * Math.PI / 180) + Math.random();
            
            aa.init(bm);
            paint_a();
            stage.addEventListener(KeyboardEvent.KEY_DOWN, move);
        }
        
        private function move(event:KeyboardEvent):void 
        {
            if (event.keyCode == 37 || event.keyCode == 65)    
                aa.Qd[0][xx] -= 15;    //left
            if (event.keyCode == 38 || event.keyCode == 87)
                aa.Qd[0][yy] -= 15;    //up
            if (event.keyCode == 39 || event.keyCode == 68)
                aa.Qd[0][xx] += 15;    //right
            if (event.keyCode == 40 || event.keyCode == 83)
                aa.Qd[0][yy] += 15;    //down
            if (event.keyCode == 82)    //'r'
                init_a();
        }
        
        private function run_a(event:Event):void 
        {
            var i:int;
            aa.run(bm);
        }
            
        private function paint_a():void 
        {
         
            line.graphics.lineStyle(1, 0x924949);
            line.graphics.moveTo(5, 5);
            line.graphics.lineTo(5, 460);
            line.graphics.lineTo(232, 460);
            line.graphics.lineTo(232, 5);
            line.graphics.lineTo(5, 5);
            line.x = 80;
            addChild(line);
            
            var g:Graphics = wall.graphics;
            g.beginFill(0x924949);
            g.drawRect(0 , 0, 237, 5);
            g.drawRect(0 , 0, 5, 465);
            g.drawRect(232 , 0, 5, 465);
            g.drawRect(0 , 460, 237, 5);
            g.endFill();
            wall.x = 80;
            addChild(wall);
        }
    }
}
import flash.utils.IDataInput;
import flash.display.Shape;

class Ball extends Shape{
    function Ball(color:uint){
        this.graphics.beginFill(color);
        this.graphics.drawCircle(0, 0, 5);
        this.graphics.endFill();
    }
}

class inte {

    public var dt:Number = 0.01;
    public var q:int = 0;
    public var N:int = 10;

    public var Q:Array;
    public var Qd:Array;
        
    public var Qd01:Array;
    public var Qd02:Array;
    public var Qd03:Array;
    
    public function inte()
    {    
        Q = new Array(N);
        Qd = new Array(N);
        
        Qd01 = new Array(N);
        Qd02 = new Array(N);
        Qd03 = new Array(N);
        
        for (var i:int = 0; i < N; i++) {
            Q[i] = new Vector.<Number>(3, true);
            Qd[i] = new Vector.<Number>(3, true);
            
            Qd01[i] = new Vector.<Number>(3, true);
            Qd02[i] = new Vector.<Number>(3, true);
            Qd03[i] = new Vector.<Number>(3, true);
        }
    }
    
    public function init(bm:Vector.<Ball>):void{
        for(var i:int = 0; i < N; i++){
            Q[i][0] = bm[i].x;
            Q[i][1] = bm[i].y;
            Qd[i][0] = 0.0;
            Qd[i][1] = 0.0;
            
            for(var j:int = 0; j < 3; j++){
                Qd01[i][j] = 0;
                Qd02[i][j] = 0;
                Qd03[i][j] = 0;
            }
        }
    }
    
    public function run(bm:Vector.<Ball>):void{
        q += 1;
        const xx:int = 0;
        const yy:int = 1;
        
        for(var i:int = 0; i < N; i++){
            bm[i].x = Q[i][xx];
            bm[i].y = Q[i][yy];
            inte_a(q,  Qd[i][xx], Q, i, xx);
            inte_a(q,  Qd[i][yy], Q, i, yy);
        }
        if(q > 3){ q = 4; }
         
        const e:Number = 1.0;
        const R:Number = 5.0;
        const frameRight:Number = 232.0 + 80 - R;
        const frameLeft:Number = 10.0 + 80;
        const frameBottom:Number = 465.0 - R;
        const frameTop:Number = 10.0 ;
        
        for(i = 0; i < N; i++){
            if(Q[i][xx] > frameRight){
                Qd[i][xx] = - Qd[i][xx];
                //Q[i][xx] = frameRight;
            }
            if(Q[i][xx] < frameLeft){
                Qd[i][xx] = - Qd[i][xx];
                //Q[i][xx] = frameLeft;
            }
            if(Q[i][yy] > frameBottom){
                Qd[i][yy] = - Qd[i][yy];
                //Q[i][yy] = frameBottom; 
            }
            if(Q[i][yy] < frameTop){
                Qd[i][yy] = - Qd[i][yy];
                //Q[i][yy] = frameTop;
            }
            for(var j:int = i+1; j < N; j++){
                var px:Number = Q[j][xx] - Q[i][xx];
                var py:Number = Q[j][yy] - Q[i][yy];
                var d:Number = Math.sqrt((px * px) + (py * py));
                var p_2:Number = d * d;
                if(d < 2 * R){
                    var ap:Number = Qd[i][xx] * px + Qd[i][yy] * py;
                    
                    var tempvx:Number = Qd[i][xx] - 2 * ap / p_2 * px;
                    var tempvy:Number = Qd[i][yy] - 2 * ap / p_2 * py;
                    
                    Qd[i][xx] =  Qd[j][xx];
                    Qd[i][yy] =  Qd[j][yy];
                    
                    Qd[j][xx] = tempvx ;
                    Qd[j][yy] = tempvy ;
                }
            }
        }
    }

    public function inte_a(q:int, Qd:Number, Q:Array, a:int, xyz:int):void 
    {
        var l1:Number, l2:Number, l3:Number, l4:Number;
        
        if(q==1||q==2||q==3){
            l1 = dt * Qd;
            l2 = dt * (Qd + l1/2);
            l3 = dt * (Qd + l2/2);
            l4 = dt * (Qd + l3);

            this.Qd[a][xyz] = Qd ;
            Q[a][xyz] = Q[a][xyz] + (l1 + 2*l2 + 2*l3 + l4)/6;

            if(q==1) {
                Qd01[a][xyz] = Qd[a][xyz];
            }
            if(q==2) {
                Qd02[a][xyz] = Qd01[a][xyz];
            }
            if(q==3) {
                Qd03[a][xyz] = Qd02[a][xyz];
            }
        }
        else{
            this.Qd[a][xyz] = Qd ;
            Q[a][xyz] = Q[a][xyz] + ( 55*this.Qd[a][xyz] - 59*Qd01[a][xyz] + 37*Qd02[a][xyz] - 9*Qd03[a][xyz] )*dt/24;
        }
        Qd03[a][xyz] = Qd02[a][xyz];
        Qd02[a][xyz] = Qd01[a][xyz];
        Qd01[a][xyz] = this.Qd[a][xyz];
    }
}