Seite 1 von 2
DrawText()
Verfasst: 15.12.2008 14:02
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
Verfasst: 15.12.2008 14:21
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) 
Verfasst: 15.12.2008 14:41
von carter
der text soll auf einen background kommen, welcher mit folgendem befehl includet wird:
LoadSprite(1,"data\background.bmp" ,0)
mfg carTer
Verfasst: 15.12.2008 14:43
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.
Verfasst: 15.12.2008 14:59
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...
Verfasst: 15.12.2008 15:04
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.
Verfasst: 15.12.2008 15:12
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?
Naja das Grundprinzip versteht carter jetzt, denk ich jetz mal.
Verfasst: 15.12.2008 15:15
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.
Verfasst: 15.12.2008 15:23
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.
Verfasst: 15.12.2008 15:29
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.pbCode: 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