-
Notifications
You must be signed in to change notification settings - Fork 0
WMClock
- new WMClock - インスタンスを生成します
- base time
- WMClock#setBaseTime - 基準時間を設定します
- WMClock#getBaseTime - 設定されている基準時間を返します
- WMClock#now - 基準時間を考慮した現在の時刻を返します
- clock state
- WMClock#start - クロックの供給を開始します
- WMClock#pause - クロックの供給を一時停止/再開します
- WMClock#stop - クロックの供給を停止します
- WMClock#isActive - クロックを供給中ならtrueを返します
- register / unregister callback functions
- WMClock#on - 定期的に呼び出すコールバック関数を登録します
- WMClock#off - 定期的に呼び出すコールバック関数の登録を抹消します
- WMClock#has - コールバック関数が登録済みならtrueを返します
- WMClock#clear - 登録済みのコールバック関数を全て抹消します
- register temporary callback function
- WMClock#nth - 一時的なコールバック関数を登録します
- utility
- WMClock#resetCount - コールバック回数をリセットします
new WMClock(ticks:TickFunctionArray = [], options:Object = {}) はインスタンスを作成し返します。
ticks にはコールバックする関数(tick)の配列を指定します。tick とは一定間隔で呼び出される関数の総称です(言語によってはonEnterFrameとも呼ばれます)。
インスタンス生成直後は、クロックの供給が行われていない状態です。 クロックの供給は WMClock#start() で明示的に開始するか、options.start = true で行います。
options には以下のプロパティを指定できます。
options | description |
---|---|
start:Boolean = false | auto start WMClock#start() を行います |
vsync:Boolean = false | requestAnimationFrame を使用します |
speed:Number = 0.0 | setInterval(, speed) を指定します |
pulse:Number = 0.0 | timeStamp と deltaTime の値を pulse の値で整形します |
baseTime:Number = 0.0 | WMClock#setBaseTime の値を指定します |
- vsync が false なら、クロックの供給源に setInterval(, 16.666) を使用します
- vsync が true なら、クロックの供給源に requestAnimationFrame を使用します
- requestAnimationFrame が利用できない環境では setTimeout(, 4) で代用します
- pulse を指定しない場合は、tick に渡される引数(timeStamp, deltaTime)が環境に依存した値になります
- pulse を指定した場合は、timeStamp, deltaTime が pulse の数値に整形された環境に依存しない値になります
var clock = new WMClock([tick], { vsync: true, start: true });
function tick(timeStamp, deltaTime, count) {
console.log(timeStamp, deltaTime, count);
}
こちらの使用例も参照してください。
WMClock#setBaseTime(baseTime:Number):void は、基準時刻(BaseTime)を設定します。
function WMClock_setBaseTime(baseTime) { // @arg Number - base time
//{@dev
$valid($type(baseTime, "Number"), WMClock_setBaseTime, "baseTime");
//}@dev
this._baseTime = baseTime;
this._baseTimeDiff = Date.now() - baseTime;
}
WMClock#getBaseTime():Number は、基準時刻(BaseTime)を返します。
function WMClock_getBaseTime() { // @ret Number - base time
return this._baseTime;
}
WMClock#now():Number は、 基準時間(BaseTime) に基づいた相対時刻を返します。 BaseTime が設定されていない場合は Date.now() と同じ値を返します。
function WMClock_now() { // @ret Number
return Date.now() - this._baseTimeDiff;
}
WMClock#start():this は、クロックの供給を開始します。
クロック供給中は、登録済みのコールバック関数(tick)が順次呼び出されます。
WMClock#pase():this は、クロック供給の一時停止と再開を行います。
クロックが供給中なら一時停止し、供給していなければ供給を開始します。
WMClock#stop():this は、クロックの供給を停止します。
クロックの供給を停止すると、コールバック関数(tick)は呼ばれなくなります。
WMClock#isActive():Boolean は、クロックが供給中なら true を返します。
WMClock#on(tick:Function):this はコールバック関数(tick)を登録します。
二重登録はできません。
tick は tick(timeStamp:Number, deltaTime:Number, count:Integer):void の形でコールバックします。
- timeStamp は クロックの供給を開始 WMClock#start した時点からの秒数(単位はms)です
- deltaTime は 前回のコールバックからの差分です(単位はms)です
- requestAnimationFrame を使用している場合は、恐らくこの値は、16.66ms前後(または33.33ms前後)になるでしょう。
-
new WMClock(, { pulse })
を指定している場合は、timeStamp と deltaTime は pulse の値で整形されます- pulse が100なら、timeStamp は 100の倍数になり、deltaTimeは常に100になります(初回のみdeltaTimeは0になります)
- count はクロックを供給する度に+1される値です。0から始まります。
- count は WMClock#resetCount で 0 にリセットできます
WMClock#off(tick:Function):this は WMClock#on で登録済みのコールバック関数を抹消します。
WMClock#has(tick:Function):Boolean は tick が登録済みなら true を返します。
WMClock#clear():this は、WMClock#on で登録済みのコールバック関数を全て抹消します。
WMClock#nth(callback:Function, times:Integer = 1):this は times 回呼ばれた後に自動的に登録を抹消する callback を登録します。
このメソッドで登録した callback は callback(timeStamp:Number, deltaTime:Number, count:Integer) の形でコールバックします。
- timeStamp は クロックの供給を開始 WMClock#start した時点からの秒数(単位はms)です
- deltaTime は 前回のコールバックからの差分です(単位はms)です
- requestAnimationFrame を使用している場合は、恐らくこの値は、16.66ms前後(または33.33ms前後)になるでしょう。
-
new WMClock(, { pulse })
を指定している場合は、timeStamp と deltaTime は pulse の値で整形されます- pulse が100なら、timeStamp は 100の倍数になり、deltaTimeは常に100になります(初回のみdeltaTimeは0になります)
- count はクロックを供給する度に+1される値です。0から始まります。
- WMClock#nth の count は常に0から始まり、WMClock#resetCountではリセットできません
function WMClock_nth(callback, // @arg Function - callback(timeStamp:Number, deltaTime:Number, count:Integer):void
times) { // @arg Integer = 1 - value from 1.
// @ret this
// @desc register the callback function of number of times.
//{@dev
$valid($type(callback, "Function"), WMClock_nth, "callback");
$valid($type(times, "Integer|omit"), WMClock_nth, "times");
if (times !== undefined) {
$valid(times > 0, WMClock_nth, "times");
}
//}@dev
times = times || 1;
var that = this;
var counter = 0;
if (this["has"](callback)) {
throw new TypeError("callback function already exists");
}
return that["on"](_handler);
function _handler(timeStamp, deltaTime) {
if (counter + 1 >= times) {
that["off"](_handler);
}
callback(timeStamp, deltaTime, counter++);
}
}
new WMClock().nth(function(timeStamp, deltaTime, count) {
console.log(count); // 0, 1, 2, 3, 4
}, 5).start();
WMClock#resetCount は、tick 関数が返す count の値を 0 にリセットします。
var clock = new WMClock([tick], { start: true, speed: 1000 });
function tick(timeStamp, deltaTime, count) {
if (count > 3) {
clock.resetCount();
}
console.log({ timeStamp:timeStamp, deltaTime:deltaTime, count:count });
}
Object {timeStamp: 1001, deltaTime: 0, count: 0}
Object {timeStamp: 2002, deltaTime: 1001, count: 1}
Object {timeStamp: 3004, deltaTime: 1002, count: 2}
Object {timeStamp: 4004, deltaTime: 1000, count: 3}
Object {timeStamp: 5005, deltaTime: 1001, count: 4}
Object {timeStamp: 6006, deltaTime: 1001, count: 0}
Object {timeStamp: 7007, deltaTime: 1001, count: 1}
Object {timeStamp: 8007, deltaTime: 1000, count: 2}
Object {timeStamp: 9009, deltaTime: 1002, count: 3}