noobtus tetris game проверьте правильность положения пташки в единстве - PullRequest
0 голосов
/ 11 октября 2018

Может кто-нибудь объяснить мне, почему мы должны делать эту функцию.Я прочитал инструкцию, но не могу понять, почему.Сайт: https://noobtuts.com/unity/2d-tetris-game/

bool isValidGridPos() {        
     foreach (Transform child in transform) {
         Vector2 v = Grid.roundVec2(child.position);

         // Not inside Border?
         if (!Grid.insideBorder(v))
             return false;

         // Block in grid cell (and not part of same group)?
         if (Grid.grid[(int)v.x, (int)v.y] != null &&
             Grid.grid[(int)v.x, (int)v.y].parent != transform)
             return false;
     }
     return true;
 }

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Эта функция очень проста.Например, bool isValidGridPos проверяет, все ли дочерние элементы в группе допустимы для перемещения.

bool isValidGridPos() {        
    foreach (Transform child in transform) { // Loop through all childs
        Vector2 v = Grid.roundVec2(child.position); //Get the position as Int (rounded number or floored number)

        // Not inside Border?
        if (!Grid.insideBorder(v)) // Checks if the Position is in the Game
            return false;

        // Block in grid cell (and not part of same group)?
        if (Grid.grid[(int)v.x, (int)v.y] != null &&
            Grid.grid[(int)v.x, (int)v.y].parent != transform)
            return false;
    }
    return true;
}
0 голосов
/ 11 октября 2018

Функция действительно проста для понимания.Сначала он просматривает каждого дочернего элемента с помощью foreach, затем сохраняет округленную позицию дочернего элемента в переменной.Затем он выясняет, находится ли эта позиция внутри границы, а затем выясняет, есть ли уже блок в той же записи сетки.

Другими словами - каждый раз, когда фигура перемещаетсяили поверните, вы должны проверить, была ли эта позиция действительной.

Вы делаете это, проверяя, что положение фигуры находится в пределах границ и что фигура не пересекается с другими формами.

Если оно выходит за границы или пересекается с другими фигурами, вы отменяете свое последнее действие.

Действие: transform.Rotate(0, 0, -90);

Отмена: transform.Rotate(0, 0, 90);

// Rotate
else if (Input.GetKeyDown(KeyCode.UpArrow)) {
transform.Rotate(0, 0, -90);

// See if valid
if (isValidGridPos())
    // It's valid. Update grid.
    updateGrid();
else
    // It's not valid. revert.
    transform.Rotate(0, 0, 90);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...