【发布时间】:2023-03-09 00:15:01
【问题描述】:
我正试图让一个球慢慢地向我的鼠标移动。
我使用的是一个简单的动画库 paper.js。使用这个我有一个球在屏幕上移动。这些是球的一些属性:
balls[0].vector.angle 是它的方向。 0 = 右,90 = 下,180 = 左等以及介于两者之间的所有内容
balls[0].point.x 是它的 x 位置,.y 是它的 y 位置。
balls[0].vector.length 是它的速度。
我已经设置了一个鼠标移动事件,我想我得到了它们之间的角度:
canvas.addEventListener("mousemove", function(e){
var a = balls[0].point.y - e.clientY;
var b = balls[0].point.x - e.clientX;
var angleDeg = Math.atan2(a, b) * 180 / Math.PI;
});
所以我让球静止了来测试它并在它周围移动我的鼠标。球的左边给了我 0 度。上面给我 90。右边给我 180。在球下面给我 -90 等等,介于两者之间。
然后我计算了同一事件中的距离并更改了速度以反映距离,将其设置为最大速度:
var distance = Math.sqrt( a*a + b*b );
var maxSpeed = 20;
balls[0].vector.length = (distance/30 > maxSpeed) ? maxSpeed : distance/30;
所以我测试了速度,这很完美。当我给球早先的角度时,它会朝各个方向移动。速度仍然有效,只是球的方向不对,我不确定我做错了什么。
【问题讨论】:
-
我建议不要打扰角度。而是做一个斜坡。它到处乱跑的问题可能是你得到了一个以度为单位的角度——通过乘以 atan * 180 并除以 PI。然后,如果您将其作为计算运动的角度,并且运动计算不会将其转换回弧度以插入 sin 和 cos,那么您的运动将非常糟糕。
-
好的,我可以看看坡度,试试这个
-
坡度有点工作,当我进入负度并飞离我时,它会突然进入相反的方向,我觉得它只是缺少一个小方程
标签: javascript html5-canvas paperjs