如何制作逼真的轮盘赌球旋转动画

剃刀

我正在使用PhysicsJS制作2D轮盘赌球旋转动画。

到目前为止,我已经实现了以下内容:

  • 使用约束,以使球不会“飞走”:
    rigidConstraints.distanceConstraint( wheel, ball, 1 );
  • 使用拖动来减慢球的速度:
    world.add(Physics.integrator('verlet', { drag: 0.9 }));
  • 使轮子吸引球,这样当阻力使球足够慢时,轮子会朝着球下落

我的问题:

  1. 我如何逐渐减慢旋转速度?
    我已经有很高的drag价值,但看起来并没有做任何事情
  2. 我如何吸引车轮工作?
    距离约束应防止球逃逸,而不是更靠近车轮。
  3. 为什么 angularVelocity: -0.005 在方向盘上根本不起作用?

我的代码,也在JSfiddle上

Physics(function (world) {
    var viewWidth = window.innerWidth
        ,viewHeight = window.innerHeight
        ,renderer
        ;

    world.add(Physics.integrator('verlet', {
        drag: 0.9
    }));

    var rigidConstraints = Physics.behavior('verlet-constraints', {
        iterations: 10
    });

    // create a renderer
    renderer = Physics.renderer('canvas', {
        el: 'viewport'
        ,width: viewWidth
        ,height: viewHeight
    });

    // add the renderer
    world.add(renderer);
    // render on each step
    world.on('step', function () {
        world.render();
    });

    // create some bodies
    var ball = Physics.body('circle', {
        x: viewWidth / 2
        ,y: viewHeight / 2 - 300
        ,vx: -0.05
        ,mass: 0.1
        ,radius: 10
        ,cof: 0.99
        ,styles: {
            fillStyle: '#cb4b16'
            ,angleIndicator: '#72240d'
        }
    })

    var wheel = Physics.body('circle', {
        x: viewWidth / 2
        ,y: viewHeight / 2
        ,angularVelocity: -0.005
        ,radius: 100
        ,mass: 100
        ,restitution: 0.35
        // ,cof: 0.99
        ,styles: {
            fillStyle: '#6c71c4'
            ,angleIndicator: '#3b3e6b'
        }
        ,treatment: "static"
    });

    world.add(ball);
    world.add(wheel);

    rigidConstraints.distanceConstraint( wheel, ball, 1 );

    world.add( rigidConstraints );

    // add things to the world
    world.add([
        Physics.behavior('interactive', { el: renderer.el })
        ,Physics.behavior('newtonian', { strength: 5 })
        ,Physics.behavior('body-impulse-response')
        ,Physics.behavior('body-collision-detection')
        ,Physics.behavior('sweep-prune')
    ]);

    // subscribe to ticker to advance the simulation
    Physics.util.ticker.on(function( time ) {
        world.step( time );
    });

    // start the ticker
    Physics.util.ticker.start();
});
碧玉
  1. Drag在PhysicsJS的那个版本中有一个错误,请尝试使用github上的最新版本。https://github.com/wellcaffeinated/PhysicsJS/issues/94

  2. 不幸的是,距离约束施加了固定的距离。因此,为了防止球以这种方式逃脱,您需要实现自己的行为。(下面有更多内容)

  3. 您必须更改behavior: "static"behavior: "kinematic"静态物体永远不会自行移动。

要创建自定义行为,请查看以下文档:https : //github.com/wellcaffeinated/PhysicsJS/wiki/Behaviors#creating-a-custom-behavior

为了获得您要描述的功能,您需要执行以下操作:

// in the behave method
// calculate the displacement of the ball from the wheel... something like....
disp.clone( wheel.state.pos ).vsub( ball.state.pos );
// if it's greater than max distance, then move it back inside the max radius
if ( disp.norm() > maxDist ){
    var moveBy = disp.norm() - maxDist;
    disp.normalize(); // unit vector towards the wheel
    disp.mult( moveBy );
    ball.state.pos.vadd( disp ); // move it back inside the max radius
}

当然,这是一种“只需完成”的方式,但它应该可以工作。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何制作逼真的轮盘赌球旋转动画

来自分类Dev

如何阻止我的轮盘赌轮长时间旋转?

来自分类Dev

如何使滚动动画工作(轮盘赌)

来自分类Dev

使用SVG制作逼真的(正弦)标记动画/抖动

来自分类Dev

使用MATLAB制作圆角旋转动画

来自分类Dev

如何链接旋转动画?

来自分类Dev

如何制作平滑的虚线边框旋转动画,例如“行军蚁”

来自分类Dev

如何反转CSS旋转动画?

来自分类Dev

如何反转CSS旋转动画?

来自分类Dev

如何使用 XML 制作翻转动画

来自分类Dev

制作旋转动画:缓慢开始和结束,但中间快速

来自分类Dev

旋转动画并翻译?

来自分类Dev

Unity 中逼真的阀轮旋转

来自分类Dev

如何使JQuery在旋转动画的循环内等待

来自分类Dev

如何使用Shell脚本创建旋转动画?

来自分类Dev

如何在Fabric JS中围绕中心旋转动画

来自分类Dev

如何在pyqt5中设置旋转动画?

来自分类Dev

如何在Fabric JS中围绕中心旋转动画

来自分类Dev

定向旋转动画完成后如何调用drawRect

来自分类Dev

如何避免旋转动画跳到2π边界?

来自分类Dev

如何使用Shell脚本创建旋转动画?

来自分类Dev

如何禁用 iPhone 和 iPad 设备的旋转动画

来自分类Dev

画布使图像旋转动画

来自分类Dev

缺少旋转动画属性

来自分类Dev

WPF几何旋转动画

来自分类Dev

如何使用Threejs实现逼真的反射

来自分类Dev

Matlab:逼真的动画弹跳球(模拟地球条件)

来自分类Dev

在7.3 / 9/2 +中,当设备旋转时,Swift如何禁用旋转动画?

来自分类Dev

如何在我的针旋转属性上应用平滑的旋转动画?