Laufschrift

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Laufschrift

Beitrag 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
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Beitrag 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.
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Rokur
Beiträge: 167
Registriert: 29.12.2005 09:58
Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)

Beitrag 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.
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Beitrag 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 ?
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

hier gibt's einige Beispiele:

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

Grüße ... Kiffi
a²+b²=mc²
Rokur
Beiträge: 167
Registriert: 29.12.2005 09:58
Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)

Beitrag 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
Zuletzt geändert von Rokur am 19.05.2008 15:36, insgesamt 1-mal geändert.
Benutzeravatar
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Beitrag 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:
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag 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.
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten