2011-12-26 27 views
1

下移我想创建一个圆ctx.arc(10, 10, 15, 0, Math.PI*2, true);,从而使其向下流动,而不会失去它的踪迹.. 你可以看到这显然是在下面的图片 -帆布 - 请在画布上的圆特定时间

enter image description here

在这里,我们可以看到在黑暗的一面......这个圆形实际上是随着时间的推移而移动..我想通过输入时间来控制速度......就像从上到下它应该达到2秒(或其他方式来控制其流速)

编辑:对不起有些朋友的问题是:什么是最有效的,“无记忆占用”的方法来做到这一点,(我知道有这种循环方法,但它的内存占用方法)

+1

问题是什么? – Howard 2011-12-26 17:47:05

+0

@Howard在这里你好友,更新了问题 – 2011-12-26 17:50:01

+3

你是什么意思的“这个循环方法”,你为什么认为这是“内存占用”?你能向我们展示迄今为止的代码吗? – Howard 2011-12-26 17:51:56

回答

1

你可以绘制顶部半圆,a矩形和底部半圆。你可以计算出多少应该在一个特定的时刻与下移:

(Date.now() - startTime)/t * (y2 - y1) 

其中t是它应该承担全部的运行时间。

http://jsfiddle.net/eGjak/231/

var ctx = $('#cv').get(0).getContext('2d'); 

var y1 = 100, // start y 
    y2 = 300, // end y 
    x = 200, // x 
    r = 50, // radius 
    t = 2000; // time 

var dy = y2 - y1, // difference in y 
    pi = Math.PI, 
    startTime = Date.now(); 

var f = function() { 
    var y = y1 + (Date.now() - startTime)/t * dy; 

    ctx.beginPath(); 
    ctx.arc(x, y1, r, pi, 0); // top semicircle 
    ctx.rect(x - r, y1, r * 2, y - y1); // rectangle 
    ctx.arc(x, y, r, 0, -pi); // bottom semicircle 
    ctx.fill(); 

    if(y < y2) { // if should be moved further 
     webkitRequestAnimationFrame(f); 
    } 
}; 

f(); 
+1

请使用[this shim](http://jsfiddle.net/paul/rjbGw/3/),不是每个人都使用webkit。 – Bergi 2011-12-26 18:13:56