großer scrolltext im windowedscreen
großer scrolltext im windowedscreen
hallo allesamt,
ich hoffe, ihr habt meine fragetopics nicht alle schon satt, das hier sollte aber vorerst das letzte sein.
ich möchte eine scrollende credits-liste erstellen, die über ein windowedscreen gezogen wird, sprich, eine sprite3d. es ergeben sich eine reihe von fragen:
1. die liste wird sehr lang und sprengt wahrscheinlich 4096px höhe, also ein grafikkartenlimit. kann PB (sprite3d, windowedscreen) damit umgehen? was geschieht auf alten grafikkarten, die nur 2048px unterstützen? oder ist das pb-spritesystem losgekoppelt von diesen zahlen?
2. ausgehend von 1., ist eine stückelung der sprite empfehlenswert? wie groß sollten die stücke sein? gibt's da unterschiede?
3. wenn man die suchfunktion verwendet, trifft man auf einiges an "umwegscode", wenn man dynamischen text darstellen will (was ich eigentlich nicht will, trotzdem interessant, falls man mal die liste ändern will, ohne im 2d-programm rumzudoktorn), der dann zeilenweise text auf ein sprite zeichnet, und das sprite dann darstellt. gibt es keinen direkteren weg? eine art auf systemfonts zurückgrefende text3d-api, die ich nicht in der hilfe finden konnte?
falls ich nämlich doch den text dynamisch halten wollen würde, gäbe es sicherlich eine längere wartepause beim programmstart, schließlich muss ich eine verdammt große sprite generieren.
danke für eure hilfe.
ich hoffe, ihr habt meine fragetopics nicht alle schon satt, das hier sollte aber vorerst das letzte sein.
ich möchte eine scrollende credits-liste erstellen, die über ein windowedscreen gezogen wird, sprich, eine sprite3d. es ergeben sich eine reihe von fragen:
1. die liste wird sehr lang und sprengt wahrscheinlich 4096px höhe, also ein grafikkartenlimit. kann PB (sprite3d, windowedscreen) damit umgehen? was geschieht auf alten grafikkarten, die nur 2048px unterstützen? oder ist das pb-spritesystem losgekoppelt von diesen zahlen?
2. ausgehend von 1., ist eine stückelung der sprite empfehlenswert? wie groß sollten die stücke sein? gibt's da unterschiede?
3. wenn man die suchfunktion verwendet, trifft man auf einiges an "umwegscode", wenn man dynamischen text darstellen will (was ich eigentlich nicht will, trotzdem interessant, falls man mal die liste ändern will, ohne im 2d-programm rumzudoktorn), der dann zeilenweise text auf ein sprite zeichnet, und das sprite dann darstellt. gibt es keinen direkteren weg? eine art auf systemfonts zurückgrefende text3d-api, die ich nicht in der hilfe finden konnte?
falls ich nämlich doch den text dynamisch halten wollen würde, gäbe es sicherlich eine längere wartepause beim programmstart, schließlich muss ich eine verdammt große sprite generieren.
danke für eure hilfe.
iMac 27" quad i7 radeon 4850 8gig ram
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
Re: großer scrolltext im windowedscreen
@broozar
Am besten zeichnest du deinen Scrolltext, d.h. du gibst dein Credittext per Drawtext im Screen aus.
Erstelle eine Variable für die Position deines Textes.
Danach brauchst du nur die Variablen verringern, somit läuft dein Textzeilen nach oben.
\\Edit:
Also etwa so:
Am besten zeichnest du deinen Scrolltext, d.h. du gibst dein Credittext per Drawtext im Screen aus.
Erstelle eine Variable für die Position deines Textes.
Danach brauchst du nur die Variablen verringern, somit läuft dein Textzeilen nach oben.
\\Edit:
Also etwa so:
Code: Alles auswählen
EnableExplicit
Define EventID
Define txtPos
InitSprite()
InitKeyboard()
If OpenWindow(0,0,0,640,480,"screen", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
If OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)
Repeat
FlipBuffers()
ClearScreen(RGB(0,0,0))
If StartDrawing(WindowOutput(0))
DrawText(10,480-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,500-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,520-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,540-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,560-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,580-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,600-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,620-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,640-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,660-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,680-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,700-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,720-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,740-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,760-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,780-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,800-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,820-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,840-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,860-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,880-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,900-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,920-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,940-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,960-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,980-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
DrawText(10,1000-TxtPos,"djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d",RGB(255,255,255),RGB(0,0,0))
TxtPos+1
StopDrawing()
EndIf
Repeat
EventID = WaitWindowEvent(10)
If EventID = #PB_Event_CloseWindow
End
EndIf
Until EventID=0
ForEver
EndIf
EndIf
Re: großer scrolltext im windowedscreen
schon klar, nun erweiter das aber mal auf 800 zeilen. wäre das nicht kriechend langsam/rechenverschwendung?
iMac 27" quad i7 radeon 4850 8gig ram
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
Re: großer scrolltext im windowedscreen
Wenn du lieber ohne mit der Draw-Lib arbeiten möchtest, dann schneide deine Creditgrafik in Teile und zeig sie hintereinander auf dem Screen an.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: großer scrolltext im windowedscreen
Ich würde ein AVI erstellen und abspielen 

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: großer scrolltext im windowedscreen
Am sinnvollsten erstellst du dir eine Sammlung aller benötigten Buchstaben als einzelne Sprites.
26 Großbuchstaben, 26 Kleinbuchstaben, 10 Zahlen, eine Handvoll Satzzeichen, Spritegröße 256² oder so.
Für die Darstellung bastelst du dir dann eine kleine Textausgabe Routine.
Den gesamten Scrolltext packst du in einen String, von dem String nimmst du immer nur die aktuellen 10 Zeichen oder so, je nach Breite.
So ähnlich könntest du das mit dem DrawText Beispiel von RSB auch machen, keinesfalls alle vorhandenen Zeichen gleichzeitig darstellen, immer nur die auf den Screen passen.
PS:
Achso, du meinst wie bei einem Abspann. Ich dachte jetzt an einen Horizontalen Scrolltext.
Dann zeichnest du immer nur so viele Zeilen, wie auf den Screen passen, nicht alle 800 die im Gesamttext sind.
Egal ob du mit DrawText arbeitest oder mit einer Sprite-Font.
26 Großbuchstaben, 26 Kleinbuchstaben, 10 Zahlen, eine Handvoll Satzzeichen, Spritegröße 256² oder so.
Für die Darstellung bastelst du dir dann eine kleine Textausgabe Routine.
Den gesamten Scrolltext packst du in einen String, von dem String nimmst du immer nur die aktuellen 10 Zeichen oder so, je nach Breite.
So ähnlich könntest du das mit dem DrawText Beispiel von RSB auch machen, keinesfalls alle vorhandenen Zeichen gleichzeitig darstellen, immer nur die auf den Screen passen.
PS:
Achso, du meinst wie bei einem Abspann. Ich dachte jetzt an einen Horizontalen Scrolltext.
Dann zeichnest du immer nur so viele Zeilen, wie auf den Screen passen, nicht alle 800 die im Gesamttext sind.
Egal ob du mit DrawText arbeitest oder mit einer Sprite-Font.
PB 4.41 - Win XP pro
Re: großer scrolltext im windowedscreen
wie wärs mitbroozar hat geschrieben:schon klar, nun erweiter das aber mal auf 800 zeilen. wäre das nicht kriechend langsam/rechenverschwendung?
Code: Alles auswählen
EnableExplicit
Define EventID
Define txtPos
Define x
Dim Abspann.s(800)
For x=0 To 800
Abspann(x)="djfhdsjk hfkjhsdfkjhs kjdfhksjdhf kdhsfjkhsdkfkh d"
Next
InitSprite()
InitKeyboard()
If OpenWindow(0,0,0,640,480,"screen", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
If OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)
Repeat
FlipBuffers()
ClearScreen(RGB(0,0,0))
If StartDrawing(WindowOutput(0))
For x=0 To 800
If x*20+480-txtPos>-20 And x*20+480-txtPos<480
DrawText(10,x*20+480-TxtPos,Abspann(x),RGB(255,255,255),RGB(0,0,0))
EndIf
Next
TxtPos+1
StopDrawing()
EndIf
Repeat
EventID = WaitWindowEvent(10)
If EventID = #PB_Event_CloseWindow
End
EndIf
Until EventID=0
ForEver
EndIf
EndIf



-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: großer scrolltext im windowedscreen
grundsätzlich doch das, was der Schlupf meinte... o.O
btw
mehrfache rechnungen mit variablen ruhig vermeiden.
und um Komparatoren und hinter Kommata macht man ein Space, das erhöht nicht nur die Lesbarkeit.
btw
Code: Alles auswählen
If x*20+480-txtPos>-20 And x*20+480-txtPos<480
DrawText(10,x*20+480-TxtPos,Abspann(x),RGB(255,255,255),RGB(0,0,0))
Code: Alles auswählen
Ty = x*20+480-txtPos
If Ty > -20 And Ty < 480
DrawText(10, Ty, Abspann(x), RGB(255,255,255), RGB(0,0,0))
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: großer scrolltext im windowedscreen
Kaeru Gaman hat geschrieben:und um Komparatoren und hinter Kommata macht man ein Space, das erhöht nicht nur die Lesbarkeit.Code: Alles auswählen
Ty = x*20+480-txtPos If Ty > -20 And Ty < 480 DrawText(10, Ty, Abspann(x), RGB(255,255,255), RGB(0,0,0))
Code: Alles auswählen
Ty = x * 20 + 480 - txtPos
If Ty > -20 And Ty < 480
DrawText(10, Ty, Abspann(x), RGB(255, 255, 255), RGB(0, 0, 0))

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
