Mercurial > MadButterfly
diff nodejs/animate.js @ 893:cad38ddb1253
Backed out changeset 23dffb564ace
author | wycc |
---|---|
date | Mon, 27 Sep 2010 23:00:51 +0800 |
parents | 23dffb564ace |
children | 460b2629be30 |
line wrap: on
line diff
--- a/nodejs/animate.js Mon Sep 27 22:37:37 2010 +0800 +++ b/nodejs/animate.js Mon Sep 27 23:00:51 2010 +0800 @@ -9,15 +9,35 @@ var ffs = 12; var frame_interval = 1000 / ffs; -function shift_draw(percent) { +function linear_draw() { var percent; + + percent = (Date.now() - this._start_tm) / this.duration; + if(percent >= 1) { + percent = 1; + if (this.obj.timer) { + this.obj.timer.stop(); + delete this.obj.timer; + } + } this.obj.x = (this.targetx-this.startposx)*percent+this.startposx; this.obj.y = (this.targety-this.startposy)*percent+this.startposy; this.app.refresh(); } -function shift(app,obj,shiftx,shifty) { - obj.animated_shift = this; +function linear_draw_start() { + var obj = this.obj; + var self = this; + + if(obj.timer) + obj.timer.stop(); + + this._start_tm = Date.now(); + obj.timer = setInterval(function() { self.draw(); }, frame_interval); +} + +function linear(app,obj,shiftx,shifty,duration) { + obj.animated_linear = this; this.app = app; this.obj = obj; this.end = 0; @@ -25,32 +45,48 @@ this.targety = shifty + obj.y; this.startposx = obj.x; this.startposy = obj.y; + this.duration = duration*1000; } -exports.shift = shift; -shift.prototype.draw = shift_draw; +exports.linear = linear; +linear.prototype.start = linear_draw_start; +linear.prototype.draw = linear_draw; /* ------------------------------------------------------------ */ function rotate(app, obj, ang, duration) { this._app = app; this._obj = obj; this._ang = ang; - this._start_mtx = [obj[0], obj[1], obj[2], obj[3], obj[4], obj[5]]; + this._duration = duration * 1000; } -function rotate_draw(percent) { +function rotate_start() { + var obj = this._obj; + var self = this; + + this._start_mtx = [obj[0], obj[1], obj[2], obj[3], obj[4], obj[5]]; + this._start_tm = Date.now(); + obj.timer = setInterval(function() { self.draw(); }, frame_interval); +} + +function rotate_draw() { var percent; var ang; var sv, cv; var obj = this._obj; var mtx, shift; + percent = (Date.now() - this._start_tm) / this._duration; + if(percent >= 1) { + percent = 1; + obj.timer.stop(); + } ang = percent * this._ang; sv = Math.sin(ang); cv = Math.cos(ang); mtx = [cv, -sv, 0, sv, cv, 0]; - sys.puts('x='+obj.center.x+',y='+obj.center.y); + shift = [1, 0, -obj.center.x, 0, 1, -obj.center.y]; mtx = multiply(mtx, shift); shift = [1, 0, obj.center.x, 0, 1, obj.center.y]; @@ -67,6 +103,7 @@ this._app.refresh(); } +rotate.prototype.start = rotate_start; rotate.prototype.draw = rotate_draw; exports.rotate = rotate; @@ -82,8 +119,10 @@ } -function scale_draw(percent) { +function scale_draw() { if (this.end == 1) return; + var percent = (Date.now() - this.starttime)/this.duration; + if (percent > 1) percent = 1; var sx = (this.targetx-this.startsx)*percent+this.startsx; var sy = (this.targety-this.startsy)*percent+this.startsy; var t=[sx,0,0,0,sy,0]; @@ -91,10 +130,13 @@ this.obj[4] = sy; this.obj[2] = this.origin_offset_x - (sx-this.startsx)*this.obj.center.x; this.obj[5] = this.origin_offset_y - (sy-this.startsy)*this.obj.center.y; - sys.puts('x='+this.obj.center.x+',y='+this.obj.center.y); this.app.refresh(); var self = this; + if (percent < 1) { + this.obj.timer=setTimeout(function() { self.draw();}, frame_interval); + return; + } this.app.refresh(); this.obj.animated_scale = null; } @@ -129,6 +171,7 @@ exports.scale = scale; +scale.prototype.start = scale_draw; scale.prototype.draw = scale_draw; function holder(app, coord) { @@ -169,11 +212,20 @@ -function alpha_draw(percent) { +function alpha_draw() { if (this.end == 1) return; + var percent = (Date.now() - this.starttime)/this.duration; + if (percent > 1) percent = 1; var sx = (this.targetalpha-this.startalpha)*percent+this.startalpha; this.obj.opacity=sx; + + this.app.refresh(); + var self = this; + if (percent < 1) { + this.obj.timer=setTimeout(function() { self.draw();}, frame_interval); + return; + } this.app.refresh(); this.obj.animated_alpha = null; } @@ -196,88 +248,6 @@ this.duration = duration*1000; } +alpha.prototype.start = alpha_draw; alpha.prototype.draw = alpha_draw; exports.alpha = alpha; - -function linear_update() -{ - var now = Date.now(); - sys.puts("real time is "+now); - sys.puts("end is "+this.end); - if (now >= this.end) { - this.timer.stop(); - now = this.end; - } - if (now < this.startmove) return; - sys.puts("now is "+now+" offset is "+(now-this.startmove)); - var per = (now-this.startmove)/this.duration/1000; - if (per > 1) per = 1; - this.action.draw(per); -} - -function linear_start() -{ - var self = this; - if (this.timer) - this.timer.stop(); - this.timer = setInterval(function() { self.update();}, frame_interval); - this.startmove = Date.now()+this.starttime*1000; - this.end = this.startmove+this.duration*1000; -} -function linear_stop() -{ - if (this.timer) { - this.timer.stop(); - this.timer = null; - } -} - -function linear_finish() -{ - this.action.draw(1); -} -function linear(action,start, duration) -{ - this.action = action; - this.duration = duration; - this.starttime = start; - this.timer=null; -} -linear.prototype.update = linear_update; -linear.prototype.start = linear_start; -linear.prototype.stop = linear_stop; -linear.prototype.finish = linear_finish; -exports.linear = linear; - - -function program(words) -{ - this.words = wrods; -} - -program.prototype.start=function() { - for(w in this.words) { - w.start(); - } -} - -program.prototype.stop=function(s) { - for(w in this.words) { - w.stop(); - } -} -program.prototype.finish=function() { - for(w in this.words) { - w.finish(); - } -} - -exports.run = function(actions,start,duration) { - for(a in actions) { - var li = new linear(actions[a],start,duration); - sys.puts(li); - li.start(); - } -} -exports.runexp=function(actions,start,exp) { -}