Habe noch Probleme das manche Wörter wiederholt werden und der ganze Text irgendwie nicht gerendert wird.
Vielleicht sieht jemand den Fehler.
EDIT: habe den Fehler gefunden. Hier der funktionierende Code für Text mit auto Zeilenumbruch:
Hat jemand eine Idee wie man den Sprite vergössern kann abhängig von den Text Zeilen die geredert werden müssen ?
Wie wird das in Spielen mit dem Text gemacht eigentlich? In einem Spiel ist der Text ja selektierbar, also kann er nicht mit den üblichen Methoden einfach auf dem Screen draufgezeichnet werden.
Code: Alles auswählen
InitSprite()
InitKeyboard()
InitMouse()
Global NewList wordList.s()
Global testText.s = "Lorem ipsum dolor sit amet, "+ Chr(13) + "consetetur sadipscing elitr," + Chr(13) + "sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat," + Chr(13) + " ende des satzes."
#LINE_BREAK = "###LB###"
Procedure generateSplitedText(text.s)
text = text + Chr(13)
textLines = CountString(text, Chr(13))
currentLine.s = ""
If textLines > 0
For line = 1 To textLines Step 1
words.l = CountString(StringField(text, line, Chr(13)), " ") + 1
If words > 0
For word = 1 To words Step 1
AddElement(wordList())
wordList() = StringField(StringField(text, line, Chr(13)), word, " ")
Next
Else
Debug("No words !")
EndIf
AddElement(wordList())
wordList() = #LINE_BREAK
Next
Else
searching = #False
EndIf
ProcedureReturn textLines
EndProcedure
Procedure generateTextBox(width.l, height.l)
CreateSprite(4, width, height)
generateSplitedText(testText)
If ListSize(wordList()) > 0
counter.l = 0;
textContainer.s = ""
tempText.s = ""
currentHeight.l = 0
If StartDrawing(SpriteOutput(4))
DrawingMode(#PB_2DDrawing_Outlined)
Box(0, 0, width, height, RGB(0, 255, 0))
width = width - 1
height = height -1
ForEach wordList()
If wordList() = #LINE_BREAK
If Len(textContainer) > 0
currentHeight = counter * TextHeight(textContainer)
DrawText(1, currentHeight + 1, textContainer, RGB(255, 255, 255))
textContainer = ""
EndIf
counter = counter +2
Continue
EndIf
tempText = textContainer + wordList() + " "
If TextWidth(tempText) < width
textContainer = tempText
Else
currentHeight = counter * TextHeight(textContainer)
DrawText(1, currentHeight + 1, textContainer, RGB(255, 255, 255))
textContainer = wordList() + " "
counter = counter +1
If currentHeight > height
Debug("abbruch Zeile" + Str(counter))
ProcedureReturn
EndIf
EndIf
Next
currentHeight = counter * TextHeight(textContainer)
DrawText(1, currentHeight + 1, textContainer, RGB(255, 255, 255))
StopDrawing()
EndIf
EndIf
EndProcedure
Procedure run()
If OpenWindow(0, 0, 0, 1024, 768, "1st App", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 1024 ,768 , 0, 0, 0, #PB_Screen_WaitSynchronization)
generateTextBox(200, 400)
Repeat
ExamineKeyboard()
ExamineMouse()
FlipBuffers()
ClearScreen(0)
DisplaySprite(4, 1, 1)
; Delay(100)
Until KeyboardPushed (#PB_Key_Escape)
EndIf
EndProcedure
run()