java - 俄罗斯方 block : Turning the pieces?

标签 java swing

所以我正在制作俄罗斯方 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/

相关文章:

java - 在卡片布局中更改当前卡片,在 Swing 中使用滑动效果

java - 我希望输出能够适应年龄

java - 将 xml 转换为 java bean

java - 有人可以解释这是如何工作的吗?

java - 如何判断菜单项是否被点击

java - 删除 SAX 解析器中的空格

java - foursquare API 和 java

java - GUI 保留方程

java - 如何在没有 HTML 的情况下获得多行 JLabel(或看起来完全相同的 JTextArea)

java - 如何在 Swing 中绘制虚拟帧缓冲区?