编程Floaty Motion

时间:2010-10-08 21:54:07

标签: c# java javascript c++ objective-c

任何人都有一个实现随机浮动运动的方法的好主意?比如,在受限区域内只是一般的平滑漂移。

这就是我的尝试:

var rangeX = 100;
var rangeY = 100;
var gravity = .001;

$('.floating').each(function() {
    $(this).data('startX', $(this).position().left);
    $(this).data('startY', $(this).position().top);
    $(this).data('velocityX', 0);
    $(this).data('velocityY', 0);
    chooseDestination();
});

setInterval(function() {
    $('.floating').each(function() {
        var changeX = ($(this).data('destinationX') - $(this).position().left) * gravity;
        var changeY = ($(this).data('destinationY') - $(this).position().top) * gravity;

        var velocityX = $(this).data('velocityX') + changeX;
        var velocityY = $(this).data('velocityY') + changeY;

        $(this).data('velocityX', velocityX);
        $(this).data('velocityY', velocityY);

        $(this).css('left', $(this).position().left + velocityX);
        $(this).css('top', $(this).position().top + velocityY);
    });
}, 10);

setInterval(chooseDestination, 2000);

function chooseDestination() {
    $('.floating').each(function() {
        $(this).data('destinationX', $(this).data('startX') - rangeX/2 + Math.random() * rangeX);
        $(this).data('destinationY', $(this).data('startY') - rangeY/2 + Math.random() * rangeY);
    });
}

但它看起来并不漂浮。

1 个答案:

答案 0 :(得分:1)

“Floaty”通常需要缓慢的速度变化。从高级角度来看,我会做的是为移动设置加速度/速度/位置模型,其中随机生成器仅影响加速度。你已经有了另外两层。在任何给定的时间点建立速度和加速度的限制(我限制绝对距离,而不仅仅限制X和Y的距离),并且不更新每帧的加速度。最后,处理速度和加速度的小数值,当您绘制对象的新位置时,它将仅在最后一分钟变为整数位置变化。你最终得到的是一个物体,它会慢慢向一个方向移动,然后开始向不同的方向漂移,可能会停下来并悬停一秒钟,然后再开始。