как создавать слова по буквам в сетку, не обрезая слова - PullRequest
0 голосов
/ 01 апреля 2019

Я делаю игру, в которой игрок решит фразу точно так же, как в колесе фортуны минус колесо, но проблема в том, что некоторые слова вырезаются, когда слово превышает 15 столбца.есть ли способ сделать слово полным в следующую строку?

я пробовал это только с тем, что я знаю, делая плитку для каждой буквы

я не могу найти какое-либо решение для этого нанет, и я только начал изучать единство

private const int Columns = 15;
private const float Space = 35.0f;
public void LettertoBox()
{

    for (int i = 0; i < currentWord.Length; i++)
    {
        int row = i / Columns;
        int column = i % Columns;


        Vector3 newPosition3;
        newPosition3 = new Vector3((cen.transform.position.x + column * Space), (((cen.transform.position.y )) - row * Space), cen2.transform.position.z);

        if (currentWord[i].ToString() != " ")
        {
            GameObject k = (GameObject)Instantiate(letterimage, newPosition3, Quaternion.identity);
            k.name = "letterimage" + (i + 1);
            k.transform.SetParent(GameObject.Find("Canvas").transform);
        }
        else
        {
            GameObject k = (GameObject)Instantiate(noletterimage, newPosition3, Quaternion.identity);
            k.name = "letterimage" + (i + 1);
            k.transform.SetParent(GameObject.Find("Canvas").transform);
        }

        GameObject l = (GameObject)Instantiate(letter, newPosition3, Quaternion.identity);
        l.name = "letter" + (i + 1);
        l.transform.SetParent(GameObject.Find("Canvas").transform);   
    }
}

Фактический результат

Ожидаемый результат

1 Ответ

0 голосов
/ 01 апреля 2019

Это должно работать для вас, пока ни одно слово в фразе не слишком велико для строки (в этом случае вам просто нужно идентифицировать ее и разделить ее с помощью '-')

public void LetterToBox() {
    int rowCount = 0;
    int position = 0;
    foreach (string word in phraseToSplitToWords.Split(" ")) {
        if (CannotFitWordWithoutCuttingPastTheLimit(position,word, whateverIsTheNumberOfLettersPerLineYouWant)) {
            rowCont++;
            position= 0;
        }
        PlaceTheWordLetterByLetterInThisPosition(position,row,word);
        position = position + word.Length +1; //+1 for the space between words
    }
}

public void PlaceTheWordLetterByLetterInThisPosition(int positionInLine, int row, string word) {
    foreach (char letter in word) {
        var x = positionInLine* LETTER_WIDTH;
        var y = row* LETTER_HEIGHT;
        InstantiateLetter(x, y, letter); //basically the same way you did

    }
}


public bool CannotFitWordWithoutCuttingPastTheLimit(int position, string word, int limit) {
    return (position + word.Length > limit);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...