|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 03.07.2021, 11:15 Titel: Problem ScreenEvent + neuer Compiler Version |
|
|
Ein Hallo an alle hier.
Der folgende kleine Codeschnipsel entspricht in etwa wie ich SCREENEVENT derzeitig benutze.
Vorrangig geht es mir nur um die Mausposition
Code: | '' include fbgfx.bi for some useful definitions
#include "fbgfx.bi"
#if __fb_lang__ = "fb"
using fb '' constants and structures are stored in the fb namespace in lang fb
#endif
dim as event e
dim as integer eventexists,mousex,mousey,deltax,deltay
screenres 640, 480
do
if (screenevent(@e)) then
eventexists=1
select case e.type
case event_mouse_move
mousex=e.x
mousey=e.y
deltax=e.dx
deltay=e.dy
end select
end if
if eventexists then
print "mouse moved to " & mousex & "," & mousey & " (delta " & deltax & "," & deltay & ")"
eventexists=0
end if
sleep 30' bei 1 kein Trace-Effekt
loop until inkey<>"" |
Das SCREENEVENT die Ereignisse während des SLEEP-Befehls in einer Art Pipe drückt, war mir bisher nicht wirklich bekannt,
ist aber hier in Forum an anderer Stelle schon mal erwähnt worden.
Bei einem SLEEP 30 zb ist dieser "TRACE-Effekt" gut beobachtbar.
Da ich normalerweise mit SLEEP 1 arbeite, ist vermutlich das "Mehr" an SCREENEVENT-Ereignissen nie so wirklich ins Gewicht gefallen und
mir daher nie bewusst gewesen.
Beim neuen Compiler v1.08.0 scheinen aber viel mehr Bewegungs-Ergnisse während eines SLEEP 1 "aufzulaufen" und schon hier
hab ich diesen "TRACE-Effekt".
Also schon bei der kleinsten CPU-Lastbremse die man einbauen kann.
Vielleicht könnt ihr auf euern Mühlen dieses Verhalten nachvollziehen, kann ja sein dass nur ich dieses Problem hier hab.
... eine "Pipe-Leer-Lese-Variante":
Code: | '' include fbgfx.bi for some useful definitions
#include "fbgfx.bi"
#if __fb_lang__ = "fb"
using fb '' constants and structures are stored in the fb namespace in lang fb
#endif
dim as event e
dim as integer eventexists,mousemoved,mousex,mousey,deltax,deltay
screenres 640, 480
do
mousemoved=0
do
if (screenevent(@e)) then
eventexists=1
select case e.type
case event_mouse_move
mousemoved=1
mousex=e.x
mousey=e.y
'die Deltas wären dann wohl so nicht mehr zu gebrauchen, da sie eventuell nur noch eine "Teilbewegung" darstellen?
'deltax=e.dx
'deltay=e.dy
end select
else
eventexists=0
end if
loop until eventexists=0
if mousemoved then
print "mouse moved to " & mousex & "," & mousey & " (delta " & deltax & "," & deltay & ")"
end if
'sleep 1
loop until inkey<>"" |
Mutton |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 03.07.2021, 16:35 Titel: |
|
|
Sieht bei mir wohl genauso aus wie bei dir.
Als Lösung möglicherweise machbar, insb. wenn es nur um eine spezielle Art von Event geht: Die Deltas extra addieren.
Code: | '' include fbgfx.bi for some useful definitions
#include "fbgfx.bi"
#if __fb_lang__ = "fb"
using fb '' constants and structures are stored in the fb namespace in lang fb
#endif
dim as event e
dim as integer eventexists,mousemoved,mousex,mousey,deltax,deltay
screenres 640, 480
do
mousemoved=0
deltax = 0
deltay = 0
do while (screenevent(@e))
select case e.type
case event_mouse_move
mousemoved=1
mousex=e.x
mousey=e.y
deltax+=e.dx
deltay+=e.dy
end select
loop
if mousemoved then
print "mouse moved to " & mousex & "," & mousey & " (delta " & deltax & "," & deltay & ")"
end if
sleep 30
loop until inkey<>"" |
kurz gesagt: Unterbrecungen immer erst am Ende der Abarbeitung aller (oder vieler) Screenevents. Dann klappt es wohl.
(Es kommt noch hinzu, dass auch PRINT ein ziemlicher Bremser ist.) _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|