【发布时间】:2020-07-06 08:23:26
【问题描述】:
我目前正在重新制作游戏 2048,但我不知道如何旋转图块。现在我决定看看 GitHub,看看其他人是如何解决这个问题的。
我正在查看的 git 项目:https://github.com/michaelzherdev/2048/blob/master/src/com/mzherdev/Game.java
我不明白的方法:
private Cell[] rotate(int angle) {
Cell[] tiles = new Cell[4 * 4];
int offsetX = 3;
int offsetY = 3;
if(angle == 90) {
offsetY = 0;
} else if(angle == 270) {
offsetX = 0;
}
double rad = Math.toRadians(angle);
int cos = (int) Math.cos(rad);
int sin = (int) Math.sin(rad);
for(int x = 0; x < 4; x++) {
for(int y = 0; y < 4; y++) {
int newX = (x*cos) - (y*sin) + offsetX;
int newY = (x*sin) + (y*cos) + offsetY;
tiles[(newX) + (newY) * 4] = cellAt(x, y);
}
}
return tiles;
}
我想知道是否有人可以帮助我弄清楚他的思维过程以及他为什么使用弧度。
也有人可以解释他对 offsetX 和 y 的含义吗?我不是以英语为母语的人。
提前致谢! 非常感谢每个答案!
真诚地, 一个有抱负的开发者
【问题讨论】:
-
因为
Math.cos()和Math.sin()使用弧度。 -
看看rotation matrix。您需要弧度,因为
Math.sin()和Math.cos()函数期望角度以弧度为单位。 -
与旋转无关,您可能需要查看2048FX,如果您想要一个相同的分步教程,请查看此repository。无需旋转...
-
糟糕的标题。重写以总结您的具体技术问题。
标签: java function javafx methods 2048