【发布时间】:2014-03-08 21:59:26
【问题描述】:
我正在用 Javascript、Canvas、HTML5 编写游戏,我刚刚发现了一个与高等数学有关的大问题。游戏为平面 2D,因此您可以从上方看到世界。这意味着没有重力,只有摩擦。
代码:
var friction = 0.97
var target = {
x: 70,
y: 90,
}
var ball = {
x: 10,
y: 20,
vx: 0,
vy: 0,
}
var dx = ball.x - target.x
var dy = ball.y - target.y
var angle = Math.atan2(dy, dx)
var dist = Math.sqrt(dx * dx + dy * dy) // <--- AS FAR AS I'VE COME
var speed = ??? // <--- HERE IS THE PROBLEM
ball.vx = Math.cos(angle) * speed
ball.vy = Math.sin(angle) * speed
function update() {
ball.vx *= friction
ball.vy *= friction
ball.x += ball.vx
ball.y += ball.vy
// Drawing and other unneccesary things to involve here
window.requestAnimationFrame(update)
}
update()
所以,我的问题是:如何计算我创建球的部分的速度,以使球准确地停在目标 x 和 y 位置?就我而言,我只计算了球和目标位置之间的起始距离.. Soo,有什么想法吗?有公式吗?
【问题讨论】:
-
你必须更详细地解释你的游戏是关于什么的。如果你的球没有初始速度并且没有加速度,那么球永远不会到达它的目标,这就是简单的物理学。我认为你有一个概念问题,没有数学问题。
-
您必须自己决定。没有时间就没有速度,所以你必须决定你想让你的球每秒移动多少像素。此外,您还必须决定,您的球每秒增加多少像素的速度。您也可以使用稳定速度
s = v*t的公式,但您仍然需要知道时间。 (我很抱歉这里的术语,我刚刚在我的英语词汇中发现了一个巨大的漏洞。) -
我希望手榴弹降落在光标处,而不是通过按住鼠标并仅朝方向射击来加载能量。
-
sry 垃圾邮件,只是一个小故障。这是一个大游戏,不是很多东西而是很多代码,我自己制作了游戏和图形,但声音只是简单地下载了
-
相当多的代码,所以我没有解释真正的问题
标签: javascript html math canvas physics