Seite 1 von 2

Laufschrift

Verfasst: 19.05.2008 14:43
von The_Dark_Zim-.-
Hey ho
Ich brauch mal wieder eure hilfe ^^
Ich bin im moment dabei einen Musikplayer zu basteln.
Nun würde ich gerne den Titel als Laufschrift anzeigen lassen!
Mein Problem ist nur wie lass ich den Text gleichmäßig/ruckelfrei laufen?? Ohne dabei zuviel Leistung zu verbrauchen.

Hoffe ihr habt eine lösung^^
In der Sufu konnte ich nix brauchbares finden.

Gruß ZIM

Verfasst: 19.05.2008 14:58
von RSBasic

Verfasst: 19.05.2008 15:06
von The_Dark_Zim-.-
Hm das ist nicht ganz was ich gesucht habe. Ich wollte einfach Text darstellen und den laufen lassen, nicht den Fenstertitel. Und ruckelfrei ist das auch nicht ^^.
Aber trotzdem schonmal danke.

Verfasst: 19.05.2008 15:10
von Rokur
Wenn es "ruckelfrei" sein soll musst du es pixelweise scrollen und nicht buchstabenweise.
Ein weiteres Problem von diesen Textscrollern ist das mit der Schriftart:
Schriftarten bei denen alle Buchstaben gleich groß sind (z.B. "Courier New") scrollen gleichmäßig, Schriftarten mit verschieden großen Buchstaben (z.B. "Arial") scrollen bei jedem Buchstaben unterschiedlich schnell.

Eine sinnvollere Möglichkeit ist folgende:
Schreibe den Text den du darstellen willst auf ein Gadget oder ein Image und scrolle dann das Gadget/Image pixelweise über das Fenster.

Verfasst: 19.05.2008 15:22
von The_Dark_Zim-.-
Ich hab das bisher immer so gemacht das der Titel immer um einen Pixel verschoben wurden, wenn er durch die Repeatschleife gelaufen ist. Das ist mir aber zuviel am ruckeln. Im Moment stell ich den Text auf einem Bild da. Aber das Bild soll nicht mitscrollen, weil das scheisse aussehen würde!
Kann man nicht eine art Uhr machen und dann den Text jede Sekunde um einen Pixel verschieben ?

Verfasst: 19.05.2008 15:32
von Kiffi
hier gibt's einige Beispiele:

http://www.purebasic.fr/english/viewtop ... 305#154305

Grüße ... Kiffi

Verfasst: 19.05.2008 15:35
von Rokur
Ein zeitgesteuerter Text-Scroller, das Image bleibt an seinem Platz, nur die Position vom Text ändert sich:

Code: Alles auswählen

EnableExplicit

#app = "Text-Scroller"

#width = 300
#height = 200

Enumeration
  #txt
EndEnumeration

CreateImage(#txt, #width, 20)

Define text.s = "Das ist der Text, welcher möglichst lang sein sollte damit es was zu scrollen gibt.."
StartDrawing(ImageOutput(#txt))
  Define length.l = TextWidth(text) + #width
StopDrawing()
Define pos.l = #width
Define speed.l = 10 ;Millisekunden pro Pixel
Define zeit.l = ElapsedMilliseconds()

Define event.l

OpenWindow(0, 0, 0, #width, #height, #app, #PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)

CreateGadgetList(WindowID(0))

Repeat
  event = WindowEvent()

  Select event
    Case 0
      Delay(1)
    Case #PB_Event_CloseWindow
      End
  EndSelect
  
  Gosub scrollText
ForEver

End

scrollText:
  If zeit+speed < ElapsedMilliseconds()
    zeit = ElapsedMilliseconds()
    StartDrawing(ImageOutput(#txt))
      DrawText(pos,0,text,#Yellow,#Black)
    StopDrawing()
    StartDrawing(WindowOutput(0))
      DrawImage(ImageID(#txt),0,0)
    StopDrawing()
    pos - 1
    If pos < -length+#width
      pos = #width
    EndIf
  EndIf
Return

Verfasst: 19.05.2008 15:35
von milan1612
Guckst du hier:

Code: Alles auswählen

Global CurrentX = 290
Global Text.s = "Ich bin ein langer, langer Text, der von rechts nach links gescrollt wird ;-)"

Procedure Callback(WindowID.l, Msg.l, wParam, lParam)
  If Msg = #WM_TIMER
    StartDrawing(ImageOutput(0))
      Box(0, 0, 290, 65, 0)
      DrawingFont(FontID(0))
      DrawText(CurrentX, 22, Text, RGB(255, 0, 0), 0)
      CurrentX - 2
      If CurrentX < -TextWidth(Text)
        CurrentX = 290
      EndIf
    StopDrawing()
    SetGadgetState(0, ImageID(0))
  EndIf
  ProcedureReturn #PB_ProcessPureBasicEvents 
EndProcedure

If OpenWindow(0, 0, 0, 300, 100, "TextScroller", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  CreateGadgetList(WindowID(0))
  CreateImage(0, 290, 65, 32)
  ImageGadget(0, 5, 5, 290, 65, ImageID(0))
  ButtonGadget(1, 5, 75, 290, 20, "Exit")
  SetWindowCallback(@Callback())
  SetTimer_(WindowID(0), 0, 20, 0)
  LoadFont(0, "Courier New", 14, #PB_Font_Bold | #PB_Font_HighQuality)
  
  Repeat
    Event = WaitWindowEvent(5)
    If Event = #PB_Event_Gadget And EventGadget() = 1
      Break
    EndIf
  Until Event = #PB_Event_CloseWindow
EndIf
EDIT: Ähh, 4 Sekunden zu spät... :lol:

Verfasst: 19.05.2008 15:46
von rolaf
Bild

Bild

Bild

Bild

Bild

Keine fertige Lösung, sondern mehr als Anregung für ne kultige Laufschrift in einem Player. :allright:

Die einzelnen Buchstaben in Images zu packen und zu Animieren sollte ja klein großes Problem sein.

Verfasst: 19.05.2008 19:56
von Kaeru Gaman
scrolltext bei Playern scrollt aber immer zeichenweise, nicht pixelweise.
wenn das nicht "ruckelfrei" ist, dann ist der timer schlecht.

es sollte doch nicht das problem sein, einem textgadget ne proportionalschriftart zuzuweisen,
und den textinhalt per timercallback zu aktualisieren...