großer scrolltext im windowedscreen

Anfängerfragen zum Programmieren mit PureBasic.
broozar
Beiträge: 97
Registriert: 08.03.2010 15:53
Wohnort: Berlin
Kontaktdaten:

großer scrolltext im windowedscreen

Beitrag von broozar »

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.
iMac 27" quad i7 radeon 4850 8gig ram
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: großer scrolltext im windowedscreen

Beitrag von RSBasic »

@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:

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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
broozar
Beiträge: 97
Registriert: 08.03.2010 15:53
Wohnort: Berlin
Kontaktdaten:

Re: großer scrolltext im windowedscreen

Beitrag von broozar »

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
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: großer scrolltext im windowedscreen

Beitrag von RSBasic »

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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
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

Beitrag von ts-soft »

Ich würde ein AVI erstellen und abspielen 8)
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.
Bild
Benutzeravatar
Schlumpf
Beiträge: 19
Registriert: 21.03.2010 00:52
Wohnort: Der Puff von Schlumpfhausen

Re: großer scrolltext im windowedscreen

Beitrag von Schlumpf »

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.
PB 4.41 - Win XP pro
Benutzeravatar
hörmi
Beiträge: 106
Registriert: 10.07.2007 15:20
Kontaktdaten:

Re: großer scrolltext im windowedscreen

Beitrag von hörmi »

broozar hat geschrieben:schon klar, nun erweiter das aber mal auf 800 zeilen. wäre das nicht kriechend langsam/rechenverschwendung?
wie wärs mit

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
Den Inhalt von Abspann() kannst dann ohne weiteres aus einer Textdatei herrausladen
BildBild Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: großer scrolltext im windowedscreen

Beitrag von Kaeru Gaman »

grundsätzlich doch das, was der Schlupf meinte... o.O

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))
mehrfache rechnungen mit variablen ruhig vermeiden.

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))
und um Komparatoren und hinter Kommata macht man ein Space, das erhöht nicht nur die Lesbarkeit.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
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

Beitrag von ts-soft »

Kaeru Gaman hat geschrieben:

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))
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))
Ich denke mal, so hat KG das gemeint :wink:
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.
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: großer scrolltext im windowedscreen

Beitrag von edel »

Ist das fuer ein Spiel oder eine Anwendung?
Antworten