画布使用RequestAnimationFrame以一定速度旋转圆

约翰·彼得森

我在JSFiddle中提出了一个快速简单的解决方案,以便更好,更快地解释:

var Canvas = document.getElementById("canvas");
var ctx = Canvas.getContext("2d");

var startAngle = (2*Math.PI);
var endAngle = (Math.PI*1.5);
var currentAngle = 0;

var raf = window.mozRequestAnimationFrame ||
    window.webkitRequestAnimationFrame ||
    window.msRequestAnimationFrame ||
    window.oRequestAnimationFrame;

function Update(){
    //Clears
    ctx.clearRect(0,0,Canvas.width,Canvas.height);

    //Drawing
    ctx.beginPath();                  
    ctx.arc(40, 40, 30, startAngle + currentAngle, endAngle + currentAngle, false);

    ctx.strokeStyle = "orange";
    ctx.lineWidth = 11.0;
    ctx.stroke();

    currentAngle += 0.02;
    document.getElementById("angle").innerHTML=currentAngle;
    raf(Update);
}
raf(Update);

http://jsfiddle.net/YoungDeveloper/YVEhE/3/

当浏览器选择fps时,如何独立于帧速旋转环。因为现在,如果速度为30fps,则旋转速度会较慢,但是如果速度为60fps,则旋转速度将为每个呼叫添加。

据我从几个线程了解到,它与getTime有关,我确实尝试过但无法完成,我需要在10秒内旋转一次。

另一件事是,角度会越来越大,并且在很长一段时间后会崩溃,因为会超出可变的最大量,那么我该如何使无缝旋转瓶盖实现?

感谢您的阅读!

用户名

只需使用时差方法将步骤锁定在新旧时间之间:

演示

从获取当前时间开始:

var oldTime = getTime();

/// for convenience later
function getTime() {
    return (new Date()).getTime();
}

然后在您的循环中:

function Update(){

    var newTime = getTime(),       /// get new time
        diff = newTime - oldTime;  /// calc diff between old and new time
    
    oldTime = newTime;             /// update old time
    
    ...
    
    currentAngle += diff * 0.001;  /// use diff to calc angle step

    /// reset angle
    currentAngle %= 2 * Math.PI;

    raf(Update);
}

使用此方法会将动画绑定到时间而不是FPS。

更新一分钟,我认为修改角度对浮子不起作用,但是您可以(必须仔细检查),以便对代码进行更新。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

画布使用RequestAnimationFrame以一定速度旋转圆

来自分类Dev

单击按钮以一定角度旋转

来自分类Dev

Pygame - 增加一定秒数的速度

来自分类Dev

如何计算一定角度的圆上的位置?

来自分类Dev

在Jquery中使用具有一定程度的step Function动画旋转

来自分类Dev

JavaScript画布-矩形围绕圆旋转

来自分类Dev

如何旋转Matplotlib表头到一定程度?

来自分类Dev

以一定速度在屏幕上移动对象。(Sprite Kit)

来自分类Dev

在ggplot2中的地图上的点周围绘制具有一定半径的圆

来自分类Dev

如何将矢量场限制为一定半径的圆?

来自分类Dev

HTML5画布-绘制线段和圆-一个圆使用不同的颜色

来自分类Dev

播放器以一定的速度移至最后一次点击,C#

来自分类Dev

无法使用画布绘制适当的圆

来自分类Dev

使用画布清除特定圆以外的区域

来自分类Dev

平滑地将可旋转对象捕捉到一定程度

来自分类Dev

C ++:围绕原点旋转点,但输出点在一定程度上不正确

来自分类Dev

如何在OpenGL中旋转一定范围内的对象?

来自分类Dev

围绕另一个旋转圆旋转圆圈

来自分类Dev

距圆心一定距离的每个点如何根据给定的“相对概率”在圆内分配n个点?

来自分类Dev

距圆心一定距离的每个点如何根据给定的“相对概率”在圆内分配n个点?

来自分类Dev

使用CSS围绕圆旋转对象?

来自分类Dev

使用组元素旋转SVG圆

来自分类Dev

在一定范围内更改值以避免循环,以提高速度

来自分类Dev

我如何让角色加速和减速而不是仅以一定速度运动(在pygame中)?

来自分类Dev

如何使图像以一定的速度随机下降到屏幕上(视频游戏js)

来自分类Dev

如何获得具有一定半径的经纬度允许的最大速度?

来自分类Dev

使用Python以一定速率发送TCP消息

来自分类Dev

如何以一定角度使用UIBezierPath绘制椭圆?

来自分类Dev

使用sed每行将模式替换一定次数

Related 相关文章

  1. 1

    画布使用RequestAnimationFrame以一定速度旋转圆

  2. 2

    单击按钮以一定角度旋转

  3. 3

    Pygame - 增加一定秒数的速度

  4. 4

    如何计算一定角度的圆上的位置?

  5. 5

    在Jquery中使用具有一定程度的step Function动画旋转

  6. 6

    JavaScript画布-矩形围绕圆旋转

  7. 7

    如何旋转Matplotlib表头到一定程度?

  8. 8

    以一定速度在屏幕上移动对象。(Sprite Kit)

  9. 9

    在ggplot2中的地图上的点周围绘制具有一定半径的圆

  10. 10

    如何将矢量场限制为一定半径的圆?

  11. 11

    HTML5画布-绘制线段和圆-一个圆使用不同的颜色

  12. 12

    播放器以一定的速度移至最后一次点击,C#

  13. 13

    无法使用画布绘制适当的圆

  14. 14

    使用画布清除特定圆以外的区域

  15. 15

    平滑地将可旋转对象捕捉到一定程度

  16. 16

    C ++:围绕原点旋转点,但输出点在一定程度上不正确

  17. 17

    如何在OpenGL中旋转一定范围内的对象?

  18. 18

    围绕另一个旋转圆旋转圆圈

  19. 19

    距圆心一定距离的每个点如何根据给定的“相对概率”在圆内分配n个点?

  20. 20

    距圆心一定距离的每个点如何根据给定的“相对概率”在圆内分配n个点?

  21. 21

    使用CSS围绕圆旋转对象?

  22. 22

    使用组元素旋转SVG圆

  23. 23

    在一定范围内更改值以避免循环,以提高速度

  24. 24

    我如何让角色加速和减速而不是仅以一定速度运动(在pygame中)?

  25. 25

    如何使图像以一定的速度随机下降到屏幕上(视频游戏js)

  26. 26

    如何获得具有一定半径的经纬度允许的最大速度?

  27. 27

    使用Python以一定速率发送TCP消息

  28. 28

    如何以一定角度使用UIBezierPath绘制椭圆?

  29. 29

    使用sed每行将模式替换一定次数

热门标签

归档