DrawText()

Anfängerfragen zum Programmieren mit PureBasic.
carter
Beiträge: 19
Registriert: 10.12.2008 20:29

DrawText()

Beitrag von carter »

Hi,

ich wollte fragen ob es mit DrawText() möglich ist, dass der text nach x sekunden wieder verschwindet, und was auch ein netter effekt wäre, wenn der text dann noch oben richtig bildschirm verschwindet und seine farbe ändert, ist das möglich?

mfg carter
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

aaaaalso.....

Die Draw befehle ebenso wie Sprite-Display-Befehle erzeugen keine eigenständigen Objekte,
sondern bringen direkt pixel auf einen Hintergrund auf.
das ist so ähnlich, wie wenn du in PAINT ne Kopie machst, und dann mehrfach "einfügen" durchführst.

bei PAINT kannst du auch eine Linie oder einen Text nicht nachträglich entfernen oder ändern,
sondern du müßtest ihn komplett löschen indem du den alten Hintergrund drübermalst
und dann den Text in veränderter Form wieder aufbringst.

Natürlich ist das dementsprechend in PB lösbar, auf jeden beliebigen Context wo du DrawText benutzen kannst,
aber wie genau du das machen musst ist sehr stark davon abhängig,
auf was für einen Context du dein Draw überhaupt ausführst.
(Fenster, Fensterelement, Image, Screen, oderwasauchimmer)


wenn du mehr infos gibst, was du wie machst, kann dir konkret geholfen werden (auch ohne 11880) ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
carter
Beiträge: 19
Registriert: 10.12.2008 20:29

Beitrag von carter »

der text soll auf einen background kommen, welcher mit folgendem befehl includet wird:

LoadSprite(1,"data\background.bmp" ,0)


mfg carTer
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

also arbeitest du mit einem Screen.

du solltest den Text nicht auf das Sprite selber drawen, sondern auf den Screen.

da du diesen sowieso zig mal pro sekunde neu darstellen musst,
ist es kein problem, die koordinaten und farbe zu ändern.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Dare Devil
Beiträge: 237
Registriert: 17.10.2008 18:24
Kontaktdaten:

Beitrag von Dare Devil »

Wie Kaeru gesagt hat, solltest du den Text nicht auf das Sprite sondern auf den Screen zeichnen.

Code: Alles auswählen

InitSprite()

OpenWindow(0, 0, 0, 400, 200, "DrawText", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

OpenWindowedScreen(WindowID(0), 0, 0, 400, 200, 0, 0, 0)

StartDrawing(ScreenOutput())
For x = 1 To 399
  For y = 1 To 199
    Plot(x, y, RGB(Random(255), Random(255), Random(255)))
  Next
Next
StopDrawing()

FlipBuffers()

GrabSprite(0, 0, 0, 400, 200) ;Das als Ersatz fuer dein Background im Spiel

StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(20, 20, "Text mit transparentem Hintergrund", 0)
DrawText(20, 40, "Geht gleich weg!", 0)
StopDrawing()
FlipBuffers()

For i = 0 To 200 ;2 Sekunden warten
  If WindowEvent() = #PB_Event_CloseWindow
    End
  EndIf
  
  Delay(10)
Next

DisplaySprite(0, 0, 0)
FlipBuffers()

For i = 0 To 200
  If WindowEvent() = #PB_Event_CloseWindow
    End
  EndIf
  
  Delay(10)
Next

Hab allerdings keine Ahnung wie du das meinst mit der Farbe aendern und wie er "verschwinden" soll...
Bild + Bild

Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ermn...
sorry, Dare Devil,
aber ein Beispiel mit etwas anderem als einer einzigen sauberen Event- und Screen-Schleife ist leider kein gutes Beispiel.

ist bestimmt gut gemeint gewesen, aber trotzdem ein how-not-to-do.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Dare Devil
Beiträge: 237
Registriert: 17.10.2008 18:24
Kontaktdaten:

Beitrag von Dare Devil »

Kaeru Gaman hat geschrieben:ermn...
sorry, Dare Devil,
aber ein Beispiel mit etwas anderem als einer einzigen sauberen Event- und Screen-Schleife ist leider kein gutes Beispiel.

ist bestimmt gut gemeint gewesen, aber trotzdem ein how-not-to-do.
Mhm - war nur so auf die schnelle programmiert. Hab aber schon so einige Programme mit mehreren Event-Schleifen programmiert - wieso ist das nicht ueblich, wenns doch funktioniert? :oops:

Naja das Grundprinzip versteht carter jetzt, denk ich jetz mal.
Bild + Bild

Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> wieso ist das nicht ueblich, wenns doch funktioniert?

weil es eben der Übersichtlichkeit extrem abträglich ist.

wenn dein proggi eh nur 100 zeilen lang ist und recht spagettimäßig,
dann fällt das weder auf noch ins gewicht.

aber wenn du ein ein bissel größeres projekt hast, dann kannst du dich ganz schnell in deinen mehreren eventloops verlaufen wenn du was hinzufügen willst,
und wunderst dich, warum dein button nicht funktioniert, dabei fragst du ihn wo ab wo er nicht existiert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Dare Devil
Beiträge: 237
Registriert: 17.10.2008 18:24
Kontaktdaten:

Beitrag von Dare Devil »

Kaeru Gaman hat geschrieben:> wieso ist das nicht ueblich, wenns doch funktioniert?

weil es eben der Übersichtlichkeit extrem abträglich ist.

wenn dein proggi eh nur 100 zeilen lang ist und recht spagettimäßig,
dann fällt das weder auf noch ins gewicht.

aber wenn du ein ein bissel größeres projekt hast, dann kannst du dich ganz schnell in deinen mehreren eventloops verlaufen wenn du was hinzufügen willst,
und wunderst dich, warum dein button nicht funktioniert, dabei fragst du ihn wo ab wo er nicht existiert.
Bei Anwendungen brauch ich nie mehrere Event-Loops - aber bei Spielen war das schon oefter der Fall...

Aber was meinst du jetgzt mit "Spaghetti-maessig"? Ich dachte bisher das haette nur was mit Benutzung von goto zu tun.
Bild + Bild

Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nein das hat eigentlich garnichts mit Goto direkt zu tun.
spagetti-code heißt, dass der code unübersichtlich und unstrukturiert ist.



@Topic

so, hier mal ne kleine Demo mit einem Mainloop
(hat ein bissel gedauert, aber ich hab ja auch noch anderes zu tun und 'n alter mann is numal kein d-zug)

DynamicText_Demo.pb

Code: Alles auswählen

EnableExplicit

#Window = 0
#Background = 0

InitSprite()

OpenWindow( #Window, #PB_Ignore,0, 300,200, "Fade Text Demo")
OpenWindowedScreen(WindowID(#Window),0,0,300,200,0,0,0)

Define n.l, counter.l

Define EvID.l, EXIT.l

Define TextX.l, TextY.l, TextCol.l
Define col1.l

; ***
; *** Hintergrund erzeugen
; ***
; *** ersetzt LoadSprite()
; ***
CreateSprite(#Background,300,200)
StartDrawing(SpriteOutput(#Background))
  For n=0 To 199
    Line(0,n,300,0,RGB(0,127-n/2,255-n))
  Next
StopDrawing()

; ***
; *** Hauptschleife
; ***

Repeat
  Repeat
    EvID = WaitWindowEvent(20)
    Select EvID
      Case #PB_Event_CloseWindow
        EXIT = 1
    EndSelect
  Until EvID = #Null

  ;ClearScreen( $201008 )  ; unnötig, da deckendes Hintergrundsprite
  DisplaySprite(#Background,0,0)

  counter +1

  Select counter
    Case 0 To 199
      TextX   = 300 - counter
      TextY   = 100
      col1    = 56 + counter
      TextCol = RGB( col1, col1, col1 ) ; heller werdendes grau
    Case 200 To 399
      TextX   = 100
      TextY   = 100
      col1    = 60 + 10 * ( counter % 20 )
      TextCol = RGB( 255, col1, 255 ) ; pulsierendes Lila
    Case 400 To 599
      TextX   = 100
      TextY   = 100 - (counter-400) / 2
      col1    = 255 - (counter-400)
      TextCol = RGB( col1, col1, col1 ) ; dunkler werdendes grau
    Case 600 To 999
      counter = 0
  EndSelect

  StartDrawing(ScreenOutput())
    DrawingMode(#PB_2DDrawing_Transparent)
    DrawText( TextX, TextY, "Ich bin eine Demo!", TextCol)
  StopDrawing()

  FlipBuffers()

Until EXIT
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten