Мне нужно написать программу набора текста для создания «трехстрочного» текстового редактора. Если длина входной строки больше, чем строка (40 символов), она будет автоматически перемещена на следующую строку.

Это мой код:

String word = "";

void setup() {
    size(1000, 600);
    textSize(26);
    fill(0);
}

void draw() {
    background(255);
    text(word, 0, 0, width, height);
}

void keyPressed() {
    int lineBreak = word.length();
    if(lineBreak > 39) {
        word = word + "\n"; 
    }
    else {
        word = word + key;
    }
}

Всякий раз, когда я запускаю проблему, длина строки останавливается на 40 символах, но не переходит на следующую строку.

1
John Flores 8 Апр 2020 в 06:46

1 ответ

text() не поддерживает разрывы строк. Вы должны хранить каждую строку в отдельной строке. Например, используйте StringList для хранения строк текста.

Создайте массив строк, в котором хранятся готовые строки. Текущая строка по-прежнему хранится в word:

StringList lines = new StringList();

Когда лимит линии достигнут, добавьте строку в список и начните новую строку:

if(lineBreak > 39) {
    lines.append(word);
    word = ""; 
}

Определите lineheight и нарисуйте линии в цикле. Вертикальное положение строки вычисляется как lineheight * (i + 1), где i — индекс строки:

int lineheight = 30;
for (int i = 0; i < lines.size(); i++) {
    String line = lines.get(i);
    text(line, 0, lineheight * (i + 1));
}
text(word, 0, lineheight * (lines.size() + 1));

См. Пример:

StringList lines = new StringList();
String word = "";

void setup() {
    size(1000, 600);
    textSize(26);
    fill(0);
}

void draw() {
    background(255);

    int lineheight = 30;
    for (int i = 0; i < lines.size(); i++) {
        String line = lines.get(i);
        text(line, 0, lineheight * (i + 1));
    }
    text(word, 0, lineheight * (lines.size() + 1));
}

void keyPressed() {
    int lineBreak = word.length();
    if(lineBreak > 39) {
        lines.append(word);
        word = ""; 
    }
    else {
        word += key;
    }
}
0
Rabbid76 8 Апр 2020 в 09:33