게임을 만들고 있는데 XML 파일에서 대화 텍스트를 읽습니다. 필요에 따라 자동으로 줄 바꿈을 추가하여 텍스트 상자에 맞도록 루틴을 만들려고합니다. 그래도 제대로 작동하지 않습니다. 가 현재 여기 코드는 다음과 같습니다.필요하다면 줄 바꿈을 삽입하는 텍스트 파서를 만들려고 시도했지만 제대로 작동하지 않습니다.
SpriteFont dialogueFont = font31Adelon;
int lastSpace = 0;
string builder = "";
string newestLine = "";
float maxWidth = 921.6f;
float stringLength = 0;
for (int i = 0; i <= speech.Length - 1; i++) //each char in the string
{
if (speech[i] == ' ') //record the index of the most recent space
{
lastSpace = i;
}
builder += speech[i];
newestLine += speech[i];
stringLength = dialogueFont.MeasureString(newestLine).X;
if (stringLength > maxWidth) //longer than allowed
{
builder = builder.Remove(lastSpace); //cut off from last space
builder += Environment.NewLine;
i = lastSpace; //start back from the cutoff
newestLine = "";
}
}
speech = builder;
내 테스트 문자열이 올바르게 여러 라인으로 분리되어야한다 긴 연설의 예입니다 "입니다 그것은 여러 줄 길이 정말 말을하지 않습니다 중요 텍스트는 예제 텍스트이기 때문에 중요합니다. " 연설을 찾고 끝나는 방법
이것은이다 : 한도를 초과을 제공 공백 될 일이 있기 때문에 http://www.iaza.com/work/120627C/iaza11394935036400.png
첫 번째 줄 작업, 나는 생각한다.
i = 81이고 lastSpace = 80은 두 번째 줄이 끝나는 곳입니다. 빌더는 .Remove 명령 앞에 다음과 같습니다 : " 을 : 이
하고는 다음과 같습니다 실행 한 후"이 \ 여러 라인으로 분할하는 \ nhas r에 긴 연설의 예입니다 C " 이것은 여러 줄로 나눌 긴 연설의 예입니다 "
세 번째 줄은 i = 123 및 lastSpace = 120에서 크기 제한을 초과합니다. .Remove : "이것은 여러 줄로 \ r \ n 여러 줄로 나뉘는 긴 연설의 한 예입니다. 몇 줄이고 길이가 여러 줄입니다."
이후 : "이 말은 \ r \ n 여러 줄로 \ r \ n 제대로 나눌 긴 연설의 한 예입니다. 그것은 몇 줄의 길이입니다 "
문자에서 볼 수 있듯이, 문자 80이 그 공간에서 제거를 시작해야하는 곳이라 할지라도, 내가 읽은 부분에서. 단일 매개 변수를 사용하여 주어진 인덱스를 포함하여 모든 것을 제거합니다. 그러나 i = 79도 역시 삭제됩니다! lastSpace를 추가하거나 빼기는 쉽지만, 인덱스 범위 밖으로 "오류 또는 더 많은 문자를 잘라냅니다. 내가 시도한 .Remove (lastSpace, i-lastSpace) 및 그 중 하나가 작동하지 않습니다. lastSpace에서 더하거나 뺍니다. 다른 방법으로 해체하려고 시도했지만 그 중 아무 것도 효과가 없었습니다.
나는 이것을 보면서 지겨워서 어떤 도움을 주신다면 감사하겠습니다.
좋습니다. 나는 개행 문자를 "실제로 존재하지 않는다"고 계속 생각했다. 어리석은 느낌,하지만 감사합니다. –