Javascript 模拟类似于尘埃粒子的运动

Javascript 模拟类似于尘埃粒子的运动,javascript,jquery,timer,physics,Javascript,Jquery,Timer,Physics,我用css和动画尝试了setInterval循环。这两种移动方式都包括从oldpos1->newpos1的微小移动,没有随机的曲线移动,但是jQuery animate会出现这种情况,但仅在随机生成的1-3像素之间,这不是我想要的 . 问题是否存在于setInterval的时钟中,在那里只有线性时间单位流动 我应该从哪里开始,使下面的图像存在于jQuery中? 我想做的是: 闪避行为: A、 B粒子 AB1-普通闪避区域,仅限一定数量 2运动: Av,Bv-随机圆周运动 Aacc,Bacc-发

我用css和动画尝试了
setInterval
循环。这两种移动方式都包括从oldpos1->newpos1的微小移动,没有随机的曲线移动,但是jQuery animate会出现这种情况,但仅在随机生成的1-3像素之间,这不是我想要的 . 问题是否存在于
setInterval
的时钟中,在那里只有线性时间单位流动

我应该从哪里开始,使下面的图像存在于jQuery中?

我想做的是:

  • 闪避行为:

    A、 B粒子

    AB1-普通闪避区域,仅限一定数量

  • 2运动:

    Av,Bv-随机圆周运动

    Aacc,Bacc-发生微小随机加速度的位置(在标记为更多压缩虚线的图像上)


    我不会依赖jQuery的
    动画来实现这一点,因为您的案例非常特殊。。。相反,使用“游戏循环模式”:拥有一个游戏对象,该对象保存一组粒子,这些粒子被移动(和碰撞…),然后以固定的间隔绘制

    以下是一个基本结构:

    function Particle(x, y) {
        this.x = x;
        this.y = y;
        this.speed = 0; // in pixels per second
        this.direction = 0; // in radians per second
    }
    
    Particle.prototype.move = function(d_time) {
        this.x += Math.cos(this.direction) * this.speed;
        this.y += Math.sin(this.direction) * this.speed;
    }
    
    Particle.prototype.draw = function() {
        // either set the position of a DOM object belonging to this particle
        // or draw to a canvas
    }
    
    function Game() {
        this.particles = Array();
    
        this.MS_PER_FRAME = 20; // in milliseconds
        this.D_TIME = 1000.0 / this.MS_PER_FRAME;
    }
    
    Game.prototype.tick = function() {
        $.each(this.particles, function(_, particle) {
            particle.move(this.D_TIME);
            particle.draw();
        })
    }
    
    Game.prototype.go = function() {
        setInterval(this.tick, this.MS_PER_FRAME)
    })
    

    然后你可以随心所欲地操纵粒子的速度和方向,也许可以通过引入额外的成员
    d_speed
    (加速度)和
    d_direction
    左右。

    有没有办法在javascript中创建半圆向量路径,然后在粒子每次到达路径末端时沿该路径移动粒子,脚本添加相同的半圆路径,但在路径大小、圆翻转中留下随机性(如果上一条路径的贝塞尔曲线向上,那么现在它将是相同的还是向下的)??如果您采用上述框架,并在每一帧/滴答中向
    方向添加一个常量
    d\u方向
    ,则粒子将以圆形移动。如果你每n毫秒改变一次d_方向,你可以像你描述的那样创建更复杂的运动模式。你应该得到随机变化加速度的路径。