self.hitBall = function(ball, x, y) {
var angle = Math.atan2((x - ball.centerX), (y - ball.centerY));
ball.velocityY = (Math.sin(angle) * 10);
ball.velocityX = (Math.cos(angle) * 10);
};
因此该函数接收球,其具有centerX变量和centerY变量。传递给函数的x和y是x,y是球被击中的点。我想让球沿着被击中的方向前进。
我不确定为什么我的代码不起作用..它表现得非常奇怪,而且我的三角函数不太好,所以我不太确定为什么它不是&#&# 39;工作。
答案 0 :(得分:1)
您的代码有两个问题:
Math.atan2()
以(y,x)顺序获取参数。大多数语言(Java,JavaScript,C等)执行此操作(Microsoft Excel和其他使用(x,y)顺序的其他语言除外)。
当你说“[make]球从它被击中的角度移动时”,你想要从球点中减去击中点。换句话说,矢量是(ball.centerX - hitX,ball.centerY - hitY)。
因此,解决方案:
解决方案1:
var angle = Math.atan2((ball.centerY - y), (ball.centerX - x));
解决方案2 - 无角度的矢量数学(等效计算):
var dx = ball.centerX - x;
var dy = ball.centerY - y;
var norm = Math.sqrt(dx * dx + dy * dy);
ball.velocityX = (dx / norm) * 10;
ball.velocityY = (dy / norm) * 10;