Schrift nach bestimmter länge abschneiden

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Freak123

Betreff: Schrift nach bestimmter länge abschneiden

BeitragSa, Jan 14, 2012 14:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe versucht eine Laufschrift zu programmieren.
Leider schaffe ich es nicht den Text nach dem bestimmten Bereich abzuschneiden.
Gibt es denn keine Möglichkeit die Zeichen, die in einen Bereich passen, zu berechnen?

Mein aktueller Stand:
Code: [AUSKLAPPEN]

Graphics 1024,768,32,2
SetBuffer BackBuffer()



Local tex$="-----"
For i=0 To 15
   tex$=tex$+"hallo"
Next
Local dx=0, tex2$=tex$
Const speed=2

Local timer=CreateTimer(60)
Repeat
   
   Rect 100,100,400,30,0
   Text 120-dx,115-StringHeight(tex2$)*0.5,tex2$
   
   If dx>StringWidth(Left(tex2$,1)) Then tex2$=Mid(tex2$,2,-1) : dx=0
   dx=dx+speed
   
   If StringWidth(tex2$)<360 Then dx=0 : tex2$=tex$
   
   Flip
   WaitTimer timer
   Cls
Until KeyHit(1)
EndGraphics
End


Hatte vor sie in meinen MP3Player einzubauen.(für überlange Titel)

lg Freak

ZEVS

BeitragSa, Jan 14, 2012 14:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst in einer Schleife mit Left immer größer werdende Stücke des Strings auslesen und mit StringWidth überprüfen, ob diese noch hineinpassen. Vielleicht tut es aber auch ein Viewport...

ZEVS

Xeres

Moderator

BeitragSa, Jan 14, 2012 14:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Sicherlich ist das möglich... erfordert nur eine passende Funktion. Was versuchst du denn da genau zu machen?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Freak123

BeitragSa, Jan 14, 2012 14:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ziel war es eine Funktion zu schreiben, die einen Text in einem dafür zugewiesenen Platz ausgiebt.

@ZEVS: Die Idee ist gut, aber ist es die einzige Möglichkeit eine Schleife zu benutzen? Der Text wird ja jeden Durchlauf gezeichnet(jedes mal Schleifen durchlauf)

Zum Viewport: Ich benutze ja nur 2D.

lg

ZEVS

BeitragSa, Jan 14, 2012 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Viewport und 2d schließen sich nicht aus (nicht verwechseln mit CameraViewport). Die Anzahl an Zeichen kannst du einmal ausrechnen und in einer Variablen speichern.

ZEVS

Xeres

Moderator

BeitragSa, Jan 14, 2012 14:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit Viewport kann man sich alle Berechnungen sparen: einfach 2x Zeichnen. Einmal sieht man den vorderen, einmal den hinteren Teil.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Freak123

BeitragSa, Jan 14, 2012 14:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke.

Habs so gelöst:
Code: [AUSKLAPPEN]
Graphics 1024,768,32,2
SetBuffer BackBuffer()

Local x=100
Local y=100
Local w=400
Local h=30
Local dx=0

Local tex$="Langer Lauftext: "
For i=0 To 15
   tex$=tex$+"hallo"
Next

Local timer=CreateTimer(60)
Repeat
   
   Viewport 0,0,GraphicsWidth(),GraphicsHeight()
   Text 0,0,"Ein anderer Text"
   
   ;Scrollbar
   Viewport x,y,w,h
   Rect x,y,w,h,0
   Text x-dx,y+h*0.5-StringHeight(tex$)*0.5,tex$
   dx=dx+1
   
   If dx>StringWidth(tex$)-w Then dx=0
   
   Flip
   WaitTimer timer
   Cls
Until KeyHit(1)
End


Vielen dank!

Man bisher relativ wenig zum thema Laufschrift.
Trotzdem. Ist das nicht lamgsam? Bei dem Minniprogramm merkt mans ja nicht.

lg freak

ZEVS

BeitragSa, Jan 14, 2012 14:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

Man bisher relativ wenig zum thema Laufschrift.
Trotzdem. Ist das nicht lamgsam? Bei dem Minniprogramm merkt mans ja nicht.

Schreibst du, um gelesen zu werden?

ZEVS
 

Seven

BeitragSa, Jan 14, 2012 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Kleine Anmerkung:
Vor Flip fehlt die 0.

EDIT: Ich meinte natürlich hinter Flip Smile
  • Zuletzt bearbeitet von Seven am Sa, Jan 14, 2012 15:26, insgesamt einmal bearbeitet

hazumu-kun

BeitragSa, Jan 14, 2012 15:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst auch ein Bild erzeugen, dass der Größe deines Laufschrift-Anzeigebereichs entspricht, und über den Imagebuffer in das Bild zeichnen.
Das Abschneiden ergibt sich dann automatisch daraus, dass, wenn du über den Imagebuffer hinaus zeichnest, sich am Bild nichts ändert.

Am Ende musst du dann nurnoch das Bild an beliebiger Position zeichnen. (Vorher wieder Setbuffer Backbuffer Wink)

P.S.: Zu erwähnen währe, dass Die Write- / Readpixelfast-Befehle Speicherzugriffsverletzungen erzeugen, wenn man in einem gelocktem Imagebuffer über die Dimensionen hinaus zu zeichnen versucht.

Seven hat Folgendes geschrieben:
Kleine Anmerkung:
Vor Flip fehlt die 0.

HINTER Flip fehlt die 0.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent
  • Zuletzt bearbeitet von hazumu-kun am Sa, Jan 14, 2012 15:08, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragSa, Jan 14, 2012 15:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Unsinn. Genau dafür gibt es Viewport.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

hazumu-kun

BeitragSa, Jan 14, 2012 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Xeres hat Folgendes geschrieben:
Unsinn. Genau dafür gibt es Viewport.


Ob meine Lösung sinnig ist, habe ich ja nicht behauptet. Aber müsste man nicht für die selbe Laufschrift an verschiedenen Positionen das gesammte Spielchen zweimal mit unterschiedlichem Viewport machen?

Ich hätte da ein Bild als Zwischenspeicher benutzt...
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent
 

Freak123

BeitragSa, Jan 14, 2012 15:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich werde trotzdem bbei der Lösung mit den Viewports bleiben, da ich eventuell
auch die Geschwindigkeit der laufschriften, pro laufschrift extra einstellen möchte.
Hier würde die Lösung mit den Images nur unnötig Speicher fressen,
weil ich dann sowieso für jede Laufschrift ein eigenes Bild bräuchte.

In den seltensten Fällen braucht man eine Laufschrift doppelt, es sei denn programmiert die Werbung rund um ein Fußballfeld.

lg freak

Hubsi

BeitragSa, Jan 14, 2012 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
hazumu-kun hat Folgendes geschrieben:
Aber müsste man nicht für die selbe Laufschrift an verschiedenen Positionen das gesammte Spielchen zweimal mit unterschiedlichem Viewport machen?


Nein. Erst wird das Spiel an sich gemalt, dann ein Viewport festgelegt und der Schriftkram reingeballert.Zum Schluss den Viewport wieder auf normal stellen, fetig Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

hazumu-kun

BeitragSa, Jan 14, 2012 23:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast nicht verstanden was ich meinte. Ich meinte zweimal die exakt selbe Laufschrift, nicht zweimal das gesammten Spiel. Tut mir Leid wenn meine Formulierung dich da in die Irre geleitet hat.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group