forked from: 異なる大きさの正方形を描く

by shmdmoto forked from 異なる大きさの正方形を描く (diff: 102)
8個の四角形を横一列に並べる
@author shmdmoto
♥0 | Line 109 | Modified 2010-10-10 02:34:31 | MIT License
play

ActionScript3 source code

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

// forked from shmdmoto's 異なる大きさの正方形を描く
package 
{
    import frocessing.display.F5MovieClip2D;
    /**
     * 8個の四角形を横一列に並べる
     * @author shmdmoto
     */
    public class GraphicExample extends F5MovieClip2D
    {
        Wonderfl.disable_capture();
        var ip1 :Interpolate;
        public function setup() : void
        {
            ip1 = new Interpolate(0, 100, 5);
        }
        public function draw() : void
        {
            rect(ip1.val(), 100, 50,50);
        }
        Wonderfl.capture_delay(7);
    }
}

import flash.utils.getTimer;
class Interpolate
{
    public static const NOINIT  :int = 1;
    public static const RUNNING :int = 2;
    public static const WAITING :int = 3;
    public static const STOPPED :int = 3;
    private var duration  :Number;
    private var begin     :Number;
    private var end       :Number;
    private var pow       :Number;
    private var tOffset   :Number;
    private var tElapsed  :Number;
    private var prevVal   :Number;
    private var tRestart  :Number;
    public  var status    :int = NOINIT;
    public function Interpolate( s:Number, f:Number,
                                 t:Number, p:Number = 1) {
        begin = prevVal = s;
        end = f;
        duration = t;
        pow = p;
    }
    public function val() :Number {
        var t :Number;
        if( status == NOINIT){
            tOffset = getTimer()/1000;
            prevVal = begin;
            status = RUNNING;
        } else if( status == RUNNING ) {
            t = getTimer()/1000;
            tElapsed = t -tOffset;
            if( tElapsed < duration ) {
                prevVal = begin + ( end - begin )*Math.pow(tElapsed/duration,pow);
            } else {
                prevVal = end;
                status = STOPPED;
            }
        } else if( status == WAITING){
            t = getTimer()/1000;
            if( t >= tRestart) {
                status = RUNNING;
                tOffset = t - tElapsed;        
            }
        }
        return prevVal;
    }
    public function pause() :void
    {
        status = STOPPED;        
    }
    public function cont() :void
    {
        status = RUNNING;
        tOffset = getTimer()/1000-tElapsed;        
    }
    public function start() :void
    {
        status = RUNNING;
        tOffset = getTimer()/1000;                
    }
    public function wait( waitTime :Number ) :void
    {
        status = WAITING;
        tRestart = getTimer() + waitTime;
    }

    public function isRunning() :Boolean
    {
        if( status == RUNNING ) {
            return true;
        } else {
            return false;
        }
    }
    public function isStopped() :Boolean
    {
        if( status == STOPPED ) {
            return true;
        } else {
            return false;
        }
    }
    public function isEnd() :Boolean
    {
        if( prevVal >= end) {
            return true;
        } else {
            return false;
        }
    }
}