俄罗斯方块旋转问题

时间:2018-10-16 02:35:02

标签: c# unity3d

我正在制作“俄罗斯方块”,但在使旋转适用于一组块时遇到问题。我的积木组由4个积木精灵组成,它们是一个空游戏对象的子代。

enter image description here

我通过更新父对象变换的位置/旋转,验证新位置在网格内,然后更新各个子块来移动/旋转块。

this.transform.position += new Vector3(1, 0);
if (IsValidGridPos())
    UpdateGrid();

this.transform.Rotate(0, 0, -90);
if (IsValidGridPos())
    UpdateGrid();

对于每个组,我都有一个中心点,我希望该组在其中移动/旋转。下图显示了每个组的中心点。

enter image description here

此功能适用于大多数组,但直线和正方形组除外。由于这两个组的中心点都不在子块的中间,因此它抛弃了我用来保存所有块位置的2D数组中的块位置。

是否有更好的方法来处理组的移动/旋转?

1 个答案:

答案 0 :(得分:0)

对于组I和O,它们的中心点位于其子块之间或在块的侧面。这导致我的生成脚本将组的中心点放置在正确的位置,而不是其子块。

Group_I的职位及其子职位。

为解决此问题,我创建了一个新脚本,该脚本将在创建组后立即将组的变换位置在x和y轴上移动0.5。

const float DISTANCE = 0.5f;
void Awake()
{
    // Moves the center point of a Group over so it's 
    // child blocks can align correctly with the game grid.
    this.transform.position += new Vector3(DISTANCE, DISTANCE);    
}

如果有人有更好的解决方案,请随时告诉我。感谢所有对我的问题发表评论的人。