Seite 2 von 3
Verfasst: 29.06.2006 11:00
von #NULL
ich hab IsScreenActive() noch nie verstanden, funktioniert dieser befehl seit pb4 denn nun wirklich?
ich würde den so verwenden:
Code: Alles auswählen
Repeat
While IsScreenActive()=0
Delay(80)
Wend
DrawStuff()
FlipBuffers()
Until 0
oder so:
Code: Alles auswählen
Repeat
If IsScreenActive()
DrawStuff()
FlipBuffers()
EndIf
Until 0
aber in beiden fällen kann ich den deaktivierten task vom desktop aus nicht mehr aktivieren. jedenfalls bekomme ich den fullscreen nicht mehr geöffnet.
Verfasst: 29.06.2006 11:53
von #NULL
...
pb-hilfe (IsScreenActive) hat geschrieben:Dieser Befehl muss nach einem FlipBuffers() aufgerufen werden, da die Ereignisse innerhalb von FlipBuffers() verwaltet werden.
und das hier funktioniert auch in beiden varianten
Code: Alles auswählen
InitSprite()
OpenScreen(1024,768, 32, "pmmmpffff")
Procedure drawstuff()
ClearScreen(0)
StartDrawing( ScreenOutput() )
Circle(200,200,Random(50), $00ff00 )
StopDrawing()
EndProcedure
If 0
Repeat
FlipBuffers()
While IsScreenActive()=0
Delay(80)
FlipBuffers()
Wend
DrawStuff()
Until 0
Else
Repeat
FlipBuffers()
If IsScreenActive()
DrawStuff()
EndIf
Until 0
EndIf
aber mit deinem code (blbltheworm) geht's trotzdem nich
Verfasst: 29.06.2006 13:12
von Kaeru Gaman
#NULL hat geschrieben:...
pb-hilfe (IsScreenActive) hat geschrieben:Dieser Befehl muss nach einem FlipBuffers() aufgerufen werden, da die Ereignisse innerhalb von FlipBuffers() verwaltet werden.
na doll.. is das neu oder mit perwoll gewaschen?
Verfasst: 29.06.2006 13:20
von #NULL
steht sowohl in der hilfe zu 3.94, als auch in der zu 4.
aber das heißt ja eh nur, dass IsScreenActive() einen wert zurückgibt, welcher im letzten flippbuffers aktualisiert wurde.
"muss nach einem FlipBuffers() aufgerufen werden" ist ja auch erfüllt, wenn der letzte flippbuffers-aufruf einen schleifendurchgang zuvor stattfand.
also
Code: Alles auswählen
Repeat
If IsScreenActive()
DrawStuff()
EndIf
FlipBuffers()
Until 0
funktioniert auch.
Verfasst: 29.06.2006 13:30
von Kaeru Gaman
> "muss nach einem FlipBuffers() aufgerufen werden" ist ja auch erfüllt, wenn der letzte flippbuffers-aufruf einen schleifendurchgang zuvor stattfand.
so kenn ichs auch funktionierend aus dem beispiel.
also liefer IsScreenActive() kein fehler beim ersten aufruf nach dem OpenScreen(), vor dem ersten FlipBuffers().
und längere zeit nach dem letzten FlipBuffers() ist er wohl auch sinnlos...
dann ist die aussage der help etwas verwirrend, weil z.b. KeyboardPushed() ohne vorheriges ExamineKeyboard() tatsächlich einen fehler liefert, da ist die formulierung "muss vorher bzw. nachher aufgerufen werden" passender.
Verfasst: 29.06.2006 14:05
von #NULL
--> WasScreenActive()
..also IsScreenActive() gibt nach OpenScreen() immer 1 zurück, auch wenn man überhaupt kein FlippBuffers() verwendet, aber dann eben auch weiterhin, wenn der screen nicht mehr aktiv ist. änderungen nach einem OpenScreen() werden für IsActiveScreen() halt nur durch Flippbuffers() erkennbar.
Verfasst: 29.06.2006 16:52
von #NULL
blbltheworm's problem scheint ein pb-bug zu sein.
nach dem wechsel vom fullscreen zum desktop mit
Alt-Tab, erhält man bei der rückkehr zum vollbildschirm einen "invalid memory access" bei FlippBuffers(), insofern zuvor
LoadSprite() oder CreateSprite() mit #PB_ANY benutzt wurde, unabhängig davon, ob das sprite später angezeigt wird oder nicht. ohne #PB_ANY, also mit Konstanten, funktioniert alles. wobei Load
Image() sowohl mit Konstanten, als auch mit #PB_ANY funktioniert.
Code: Alles auswählen
Global picBG.l
InitSprite()
OpenScreen(1024,768,32,"fllscrn")
file$="data\ding.bmp"
Select 3
Case 1 :picBG=LoadSprite( #PB_Any,file$) ; <-- funktioniert nicht
Case 2 :picBG=CreateSprite(#PB_Any, 80,50) ; <-- funktioniert nicht
Case 3 :LoadSprite(0,file$)
Case 4 :CreateSprite(0, 80,50)
Case 5 :picBG=LoadImage( #PB_Any,file$)
Case 6 :LoadImage( 0,file$)
EndSelect
; Procedure drawstuff()
; StartDrawing( ScreenOutput() )
; Circle(200,200,Random(50), $00ff00 )
; StopDrawing()
; DisplaySprite(picBG,100,100)
; EndProcedure
Repeat
If IsScreenActive()
ClearScreen(100<<16)
;drawstuff()
EndIf
FlipBuffers() ; <---------------------- "invalid memory access" in fall 1 und 2
Delay(10)
Until 0
Verfasst: 01.07.2006 10:55
von #NULL
ich würde zumindest gern wissen ob jemand dieses verhalten (nicht) bestätigen kann, bzw ob das problem schon bekannt ist.
Verfasst: 02.07.2006 15:53
von blbltheworm
Ich hab es jetzt mal entsprechend umgeschrieben (also ohne #PB_Any) und siehe da es funktioniert.
Trotzdem sollte der Bug schnellst möglich beseitigt werden, denn es macht das ganze sehr kompliziert.
Verfasst: 02.07.2006 17:00
von Kaeru Gaman
ich finds interessant, dass der Bug noch nicht vorher bemerkt wurde, ist der neu?
davon ab, für die art wie ich konzeptioniere, wäre es eher unpraktisch, meine sprites mit PB_Any zu erzeugen anstatt mit fest zugewiesenen Nummern.
mag sein, dass es viele so halten, und deshalb der Bug noch nicht bemerkt wurde.