c# - 编程 float 运动

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

有人知道实现随机 float 运动的方法吗?比如,在受限区域中进行一般的平滑漂移。

这是我尝试过的:

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);
    });
}

虽然看起来真的不是很飘。

最佳答案

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

关于c# - 编程 float 运动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3894590/

相关文章:

c# - x 秒后停止循环线程方法

c# - 通过从dll中获取文件来读取文件的内容

java - 从 Spring 中的文件路径加载属性文件

java - 如何在 Android 上获取表列数组列表?

javascript - 如何使用正则表达式从方括号中获取内容?

javascript - IntelliJ 未解析的函数或方法与 jQuery

c# - Linq-to-SQL WHERE IN 语句返回的内容超出预期

c# - 带有列表的 asp.net 核心 ioptions

java - Objects.isNull(...)/Objects.nonNull(...) 的用途

javascript - Service Worker 可以访问浏览器缓存吗?