forked from: 異なる大きさの正方形を描く
forked from 異なる大きさの正方形を描く (diff: 102)
8個の四角形を横一列に並べる @author shmdmoto
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;
}
}
}
