Seite 1 von 2
Delay()
Verfasst: 27.11.2005 20:09
von <MeuchleR.>
Hallo,
in PB gibt es ja den Befehl Delay() der das gesamte Programm für eine bestimmte Zeit lang komplett anhält. Existiert auch ein Befehl der es mir erlaubt nur einen bestimmten Teil des Programmes anzuhalten ( wie z.B. eine bestimmte Prozedur ) und nicht alles auf ein mal?
Danke für eure Hilfe

.
<M.>
Verfasst: 27.11.2005 20:15
von ts-soft
Du kannst unter umständen aus der Procedure einen Thread erstellen und dort ein Delay einfügen
Aber sag lieber mal genau, was Du bezweckst.
Verfasst: 30.06.2006 16:51
von onny
hi, gerade nach sowas such ich auch....
Code: Alles auswählen
StartDrawing(ScreenOutput())
Locate(0,0)
DrawText("TEST")
Delay(20000)
Locate(0,15)
DrawText("Funzt nich so ganz")
StopDrawing()
Also man sollte erst den ersten Text sehen und nach ner Zeit den anderen.... geht das nur mit Threads?
Verfasst: 30.06.2006 16:58
von ts-soft
>> geht das nur mit Threads?
wie anders sollte es sonst gehen??? Oder den zu pausierenden Teil einfach
nicht aufrufen im Code
Verfasst: 30.06.2006 17:01
von #NULL
>>Also man sollte erst den ersten Text sehen und nach ner Zeit den anderen
Code: Alles auswählen
StartDrawing(ScreenOutput())
Locate(0,0)
DrawText("TEST")
StopDrawing()
Delay(2000)
ClearScreen(0)
StartDrawing(ScreenOutput())
Locate(0,15)
DrawText("Funzt nich so ganz")
StopDrawing()
Verfasst: 30.06.2006 17:10
von Kaeru Gaman
OMFG
mach doch sowas nich.
denk immer in kontinuierlichen hauptschleifen.
ein paar frames lang einblenden, stehen lassen, ein paar frames lang ausblenden, dann dasselbe mit dem zweiten text.
sonst macht ein anfänger das nämlich erst so mit fortlaufenden code, und dann kommt:
"so fertig, klappt prima, und jetzt will ich scrollende sterne im hintergrund haben"
also, immer gleich in frames denken, das erspart ne menge umstrickerei nachher.
@topic
proceduren laufen nicht parallel ab, sondern für sich.
das komplette programm läuft normalerweise step-by-step ab, nix davon läuft parallel, denn das ist kein OOP. (und auch da läuft nich wirklich was parallel, nur scheinbar)
schildere doch mal genau, worauf du hinaus willst, dann kann man bestimmt auch ne lösung finden.
Verfasst: 30.06.2006 17:53
von mardanny71
Lies Dir mal das mit ElapsedMiliseonds() durch.
Natürlich dann nicht mit Delay() - sondern Wert in Datumsformat - +x - Vergleichen (größer als) - Aktion.
grüsse an alle
mardanny71
Verfasst: 30.06.2006 19:00
von #NULL
Code: Alles auswählen
Structure timerS
ID$
start.l
duration.l
mode.l
EndStructure
NewList timer.timerS()
AddElement( timer() )
timer()\ID$="first"
timer()\start=ElapsedMilliseconds()
timer()\duration=1000
timer()\mode=1
AddElement( timer() )
timer()\ID$="second"
timer()\start=ElapsedMilliseconds()
timer()\duration=666
timer()\mode=1
InitSprite()
win=OpenWindow(#PB_Any, 50,50,300,80, "")
OpenWindowedScreen( WindowID(win), 0,0,300,80, 0,0,0)
Repeat
ForEach timer()
With timer()
If ElapsedMilliseconds() > (\start + \duration)
\mode!1
\start=ElapsedMilliseconds()
EndIf
EndWith
Next
ClearScreen(0)
StartDrawing(ScreenOutput())
ForEach timer()
If timer()\mode
If timer()\ID$="first"
;Locate(0,0)
DrawText(30,35,"first timer on")
EndIf
If timer()\ID$="second"
;Locate(0,15)
DrawText(150,35,"second timer on")
EndIf
EndIf
Next
StopDrawing()
event=WindowEvent()
Select event
Case #PB_Event_CloseWindow
quit=1
EndSelect
FlipBuffers()
Delay(0)
Until quit
Verfasst: 30.06.2006 20:57
von STARGÅTE
So würde erst "TEST" angezeigt und dann "Funzt nich so ganz"
Code: Alles auswählen
Repeat
Delay(1)
StartDrawing(ScreenOutput())
If Time < 20000 :
Locate(0,0)
DrawText("TEST")
EndIf
If Time >= 20000 :
Locate(0,15)
DrawText("Funzt nich so ganz")
EndIf
StopDrawing()
ForEver
Verfasst: 30.06.2006 21:06
von onny
hm... versteh ich nich so ganz 0.o
glaub ich werd mich lieber mal mit threads beschäftigen... hoffe da gibts ein paar gute beispiele ^^
thx für die lösungen!