Seite 1 von 4

großer scrolltext im windowedscreen

Verfasst: 24.04.2010 12:22
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.

Re: großer scrolltext im windowedscreen

Verfasst: 24.04.2010 12:28
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

Re: großer scrolltext im windowedscreen

Verfasst: 24.04.2010 12:48
von broozar
schon klar, nun erweiter das aber mal auf 800 zeilen. wäre das nicht kriechend langsam/rechenverschwendung?

Re: großer scrolltext im windowedscreen

Verfasst: 24.04.2010 12:50
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.

Re: großer scrolltext im windowedscreen

Verfasst: 24.04.2010 13:06
von ts-soft
Ich würde ein AVI erstellen und abspielen 8)

Re: großer scrolltext im windowedscreen

Verfasst: 24.04.2010 13:30
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.

Re: großer scrolltext im windowedscreen

Verfasst: 24.04.2010 15:44
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

Re: großer scrolltext im windowedscreen

Verfasst: 24.04.2010 17:05
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.

Re: großer scrolltext im windowedscreen

Verfasst: 24.04.2010 17:16
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:

Re: großer scrolltext im windowedscreen

Verfasst: 24.04.2010 17:53
von edel
Ist das fuer ein Spiel oder eine Anwendung?