我正在写一个俄罗斯方块克隆,它几乎完成了,除了碰撞。例如,为了移动Piece Z,我使用一种方法:
void PieceZ::movePieceDown()
{
drawBlock (x1,y1++);
drawBlock (x2,y2++);
drawBlock (x3,y3++);
drawBlock (x4,y4++);
}
并且为了旋转一块我使用一个setter(因为坐标是私有的)。为了旋转,我使用90度顺时针旋转矩阵。例如,如果我想移动(x1,y1)并且(x2,y2)是我的原点,那么获取新块的x和y:
newX = (y1-y2) + x2;
newY = (x2-x1) + y2 + 1;
这在某种程度上起作用,它起初是:
0 0 0 0
0 1 1 0
0 0 1 1
0 0 0 0
然后按计划旋转到:
0 0 0 1
0 0 1 1
0 0 1 0
0 0 0 0
然后它旋转到片S:
0 0 0 0
0 0 1 1
0 1 1 0
0 0 0 0
然后它只是在第二和第三阶段之间交替。
我的计算错了,但我无法弄清楚在哪里,我只需要一点提示。
答案 0 :(得分:0)
好的,它应该如何(有点):
origin
newX = y - origin.y;
newY = -x + origin.x;
这应该有效(我从维基百科和旋转矩阵得到了这个想法:https://en.wikipedia.org/wiki/Transformation_matrix)