作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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 是球被击中的点。我想让球沿着击球的方向移动。
不太确定为什么我的代码不起作用......它的行为非常奇怪,而且我对三 Angular 学不太擅长,所以我不太确定为什么它不起作用。
最佳答案
您的代码有两个问题:
Math.atan2()
按 (y, x) 顺序获取参数。大多数语言(Java、JavaScript、C 等)都会这样做(Microsoft Excel 和其他一些语言除外,它们使用 (x, y) 顺序)。
当您说“[使]球按照击球的 Angular 行进”时,您想要从球点中减去击球点。换句话说,向量是(ball.centerX - hitX,ball.centerY - hitY)。
因此,解决方案:
解决方案 1:
var angle = Math.atan2((ball.centerY - y), (ball.centerX - x));
解决方案 2 - 进行不带 Angular 向量数学计算(等效计算):
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;
关于javascript - 需要让球按照击球的 Angular 行进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36389483/
self.hitBall = function(ball, x, y) { var angle = Math.atan2((x - ball.centerX), (y - ball.cente
我是一名优秀的程序员,十分优秀!