Перенос строки работает странно (C# + SFML)

64
07 марта 2022, 13:00

Делаю программу на SFML. Я хотел сделать, чтобы когда текст выходил за границы экрана, текст переносился на новую строку. Вот код:

        public static Text ConsoleOutput { get; private set; }
        public static void Init()
        {
            ConsoleOutput = new Text();
            ConsoleOutput.CharacterSize = 24;
            ConsoleOutput.FillColor = Color.White;
            ConsoleOutput.Position = new Vector2f(10,10);
            ConsoleOutput.Font = new Font(Environment.CurrentDirectory + "\\C\\System\\terminal.ttf");
        }
        public static void Write(string text)
        {
            float width = 0;
            foreach(var item in text)
            {
                if(width >= ResultWindow.Window.Size.X)
                {
                    WriteLine("");
                    width = 0;
                }
                else
                {
                    width += ConsoleOutput.CharacterSize;
                }
                ConsoleOutput.DisplayedString += item;
            }
        }
        public static void WriteLine(string text)
        {
            float width = 0;
            foreach (var item in text)
            {
                if (width > ResultWindow.Window.Size.X - 32)
                {
                    ConsoleOutput.DisplayedString += "\n";
                    width = 0;
                }
                else { width += Console.Output.ConsoleOutput.CharacterSize; }
                ConsoleOutput.DisplayedString += item;
            }
            ConsoleOutput.DisplayedString += "\n";
        }

Но работает так:

Теперь подробнее: На запуске до появления окна, оно запускает метод Init(), который настраивает размер, цвет, шрифт текста. Размер шрифта - 24. И также до появления окна оно запускает метод Write("текст"), которое добавляет текст в строку но проходится по каждому символу текста, и также..У меня есть переменная width, которая прибавляется на размер шрифта (24) каждый символ, и если на символе ширина текста становится больше ширины окна - 32, строка переносится и width становится 0.

Размер окна: 840x420

Answer 1

Метод Vector2f Text.FindCharacterPos(uint index) получает графическую позицию символа относительно текста. Что касается размеров шрифта, он указывается не в пикселях, и самостоятельно вычислять его ширину в пикселях ввиду сложности темы крайне не рекомендуется.

READ ALSO
Передача ссылочного параметра в метод по значению

Передача ссылочного параметра в метод по значению

В документации microsoft написано, что если передавать ссылочный тип по значению, то фактически в метод передаётся копия на ссылкуТогда почему...

106
Sfml c# linux как компилить?

Sfml c# linux как компилить?

Как работать с sfml на с# в линуксЕсть идея с моно, но есть желание разрабатывать сразу на ubuntu и запускать

164
Многопоточность в win-службе на .net core

Многопоточность в win-службе на .net core

Помогите разобраться с правильным использованием многопоточности в виндовс-службе, написанной наnet core

88