所以我正在制作俄罗斯方 block 游戏,我遇到的问题之一是棋子旋转。我知道我可以硬编码,但这不是正确的方法。系统的工作方式是我有一个对象“Tile”的二维数组,“Tile”对象具有 x、y 坐标、 boolean 值 isActive 和颜色。 boolean 值 isActive 基本上告诉计算机实际使用了哪些图 block (因为俄罗斯方 block 形状不是完美的四边形)。
以下是我如何在我的系统中制作形状:
public static Tile[][] shapeJ() {
Tile[][] tile = new Tile[3][2];
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 2; y++) {
tile[x][y] = new Tile(false, Color.blue);
}
}
tile[0][0].setActive(true);
tile[0][0].setX(0);
tile[0][0].setY(0);
tile[1][0].setActive(true);
tile[1][0].setX(50);
tile[1][0].setY(0);
tile[2][0].setActive(true);
tile[2][0].setX(100);
tile[2][0].setY(0);
tile[2][1].setActive(true);
tile[2][1].setX(100);
tile[2][1].setY(50);
return tile;
}
现在我需要旋转这个对象,如果不对位置进行硬编码,我不知道该怎么做。必须有一个算法。谁能提供一些帮助?
最佳答案
我在编写俄罗斯方 block 克隆时使用的一个好方法是使用旋转矩阵:
http://en.wikipedia.org/wiki/Rotation_matrix
So the coordinates (x',y') of the point (x,y) after rotation are:
x' = x*cos(theta) - y*sin(theta);
y' = x*sin(theta) + y*cos(theta);
其中 theta 是旋转角度(对于我所知道的 java 函数,+-90 度或 +-PI/2 弧度) 在这种情况下, block 围绕原点 (0, 0) 旋转,因此您要么必须将 block 的坐标置于特殊的“ block 空间”中,然后将其转置到“场空间”中,要么去除 block 的偏移量以便每次迭代都以原点为中心。
希望对您有所帮助,我很乐意回答评论中的具体问题。
关于java - 俄罗斯方 block : Turning the pieces?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20307055/