作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果您在位置 (100, 100) 处有一个 Sprite ,并且想要将其沿着一条线移动到位置 (200, 300),那么如何以最多 5 个像素的增量进行此操作。目前,我只是使用 x/y 位置的差异来计算长度并一次将 Sprite 移动长度的 1/10。
相反,我希望它最多移动 5 个像素。因此,对于此示例,由于下一个 y 位置比下一个 x 位置远 2 倍,因此它应该在 y 方向上进一步移动 2 倍,以便 Sprite 通过直线到达该位置。
当前代码:
public void move() {
double currentX = this.getCenterX();
double currentY = this.getCenterY();
double nextX = next.getCenterX();
double nextY = next.getCenterY();
// Used to jump by 1/10 edge length
double xDif = Math.abs(currentX - nextX);
double yDif = Math.abs(currentY - nextY);
// Move by 1/10 the length in correct direction
if (currentX > nextX) {
this.setX(this.getX() - (xDif/10));
} else if (currentX < nextX) {
this.setX(this.getX() + (xDif/10));
}
if (currentY > nextY) {
this.setY(this.getY() - (yDif/10));
} else if (currentY < nextY) {
this.setY(this.getY() + (yDif/10));
}
}
最佳答案
要获取运动 vector ,首先需要获取方向 vector ,以便获取方向的单位 vector (长度为 1 的 vector )。
方向 vector 是起点和终点之间的增量(差值)x1 - x0, y1 -y0
。
要获得单位 vector ,请获取每个 vector 分量 (x, y)
并将其除以 vector 总大小 sqrt(x^2 + y^2)
>.
double xDirection = currentX - nextX;
double yDirection = currentY - nextY;
double magnitude = Math.sqrt(xDirection*xDirection + yDirection*yDirection);
double xUnit = xDirection/magnitude;
double yUnit = yDirection/magnitude;
现在,如果您只想移动总共 5 个像素,那么您可以通过将单位 vector 的每个分量乘以 5 来得出移动 vector :
double xMovement = xUnit * 5;
double yMovement = yUnit * 5;
this.setX(this.getX() + xMovement);
this.setY(this.getY() + yMovement);
关于java - 如何沿着一条线将 Sprite 一次移动一定数量的像素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35629000/
我正在尝试开发右边框/Angular 具有特定 Angular (30°) 的表格。我见过一些类似的解决方案,但它们都无法在一定程度上发挥作用。如果我想从 30° 改变到 20°,我不想花太多力气。
我是一名优秀的程序员,十分优秀!