gpt4 book ai didi

javascript - 当接近目标时朝某个方向的运动会振荡

转载 作者:行者123 更新时间:2023-11-28 19:40:14 25 4
gpt4 key购买 nike

我有一个非常简单的动画:http://jsfiddle.net/k5uf9bm5/

我有一个矩形(播放器),当我单击文档中的某个位置时,播放器会向该目标位置移动。

问题是它无法完全达到目标——它会无休止地来回振荡。

这对我来说很奇怪,因为它总是可以在其他语言中使用,而且实际上与其他游戏使用的实现类似。我无法解决的问题可能是什么?

为了完成问题,这是代码:

<html>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script>
var pos = {x: 0, y: 0}
var target = null
var $player = $("#player")

$(document).click(function(e) { target = {x: e.pageX, y: e.pageY} })

function update() {
$player.css({left: pos.x + 'px', top: pos.y + 'px'})

if(target) {
var dx = target.x - pos.x
var dy = target.y - pos.y
var len = Math.sqrt(dx*dx + dy*dy)
dx /= len
dy /= len

/*var theta = Math.atan2(target.y - pos.y, target.x - pos.x)
var dx = Math.cos(theta)
var dy = Math.sin(theta)*/

pos.x += dx
pos.y += dy
}

setTimeout(update, 25)
}

update()
</script>
<style>
#player {
position: absolute;
width: 15; height: 15;
background-color: black;
}
</style>
<body>
<body>
<div id="player">x</div>
</body>
</html>

最佳答案

您似乎缺少中断条件。 len包含到目标的距离。

 var len = Math.sqrt(dx*dx + dy*dy) 

在你的代码中,你总是以单位向量向目标移动。现在假设到目标的距离是 3.5 个单位。那么你将永远围绕目标振荡。在第 4 步,您将超调 0.5。然后在第 5 步下冲 0.5,依此类推。

您应该确保如果 len <1然后不要除以它,只需使 pos 等于目标位置,然后停止调用 update。

如果 len == 0,这也将解决可能被零除的问题

关于javascript - 当接近目标时朝某个方向的运动会振荡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25226889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com