Andauernde Abfrage
Übersicht

![]() |
SeomanBetreff: Andauernde Abfrage |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
gibt es eine Möglichkeit etwas, z. B. die Mausbewegung, durchgehend abzufragen, wärend hunderte anderer Befehle durchrattern? (Nicht wundern, wenn es eine sehr einfache Lösung gibt, denn auf einfache Lösungen komme ich im Normalfall erst recht nicht... Leider!) Danke im Voraus Seoman |
||
- Zuletzt bearbeitet von Seoman am Mo, Jul 12, 2004 11:24, insgesamt 2-mal bearbeitet
![]() |
dominik |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] repeat
x = mousex() y = mousey() until ....... |
||
![]() |
Seoman |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aber wärend ner Repeat-Schleife läuft das Program ja nicht weiter, sondern eben nur die Schleife, oder? | ||
![]() |
dominik |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja, alles was in der schleife steht. | ||
![]() |
Bfox |
![]() Antworten mit Zitat ![]() |
---|---|---|
Diese Repeat-Schleife ist die Hauptschleife! ![]() Also läuft das Programm weiter! ![]() |
||
Glauben ist Mangel an Wissen! |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Möchtest du während eines Hauptschleifendurchlaufes mehrfach die Mausposition erfragen?
Dafür könntest du dir ne Funktion (s.u.) schreiben die du an den passenden Stellen aufrust und dir die Koords in globalen Variablen speichert. Allerdings ist die durchschnittliche Hauptschleife (hoffentlich) so kurz dass eine mehrfache Abfrage kaum Sinn macht. Code: [AUSKLAPPEN] global MausX,MausY Function Mausabfrage() MausX = mouseX() MausY = mousey() end function |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Seoman |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, aber wenn ich aus der Hauptschleife in eine Function springe, die solange läuft bis man einen Button drückt und dann mit Return 1 beendet wird, findet während eben dieser Function die Abfrage doch nicht stattt...
EDIT: Ein Beispeil: Ich programmiere ein Menü mit Buttons zum Maus anklicken. In meiner Hauptschleife steht dann Menue() Mehr nicht. Das Menü ist in mehrere Funktionen gegliedert. Die Menü-Funktion heißt einfach Menü und sie baut auf auf die Funktion Button, welche abfragt, ob ein Button gedrückt wird und diesen zeichnet, auf. Dann, bei einem Buttondruck springt er zur Funktion Start oder Optionen und so weiter. Während all diese Funktionen laufen befindet man sich ja eigentlich schon nicht mehr richtig in der Hauptschleife und diese läuft auch erst weiter, wenn die Bedingungen der Funktionen erfüllt sind. |
||
- Zuletzt bearbeitet von Seoman am Mo, Jul 12, 2004 11:33, insgesamt 2-mal bearbeitet
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Seoman, nein BB unterstützt kein Threading von haus aus!
du musst deine Function kleiner Stückeln! |
||
between angels and insects |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
hmmm...
Code: [AUSKLAPPEN] if mousehit(1) then klick_links=1
. . . if klick_links=1 then ;blubb ; Blabb klick_links=0 end if Wenn es dir nur um ne Mausklickabfrage geht... Das wirds von BB im Mauspuffer gehalten. In meinem Beispiel setz ich dann ne Statusvariable, man könnte aber (je nachdem was man machen will) auch direkt Befehle zur Verarbeitung anfügen. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Seoman |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein, die MausHit-Abfrage macht meine Button-Funktion, das ist einfach, aber ich bin im Fullscreen und möchte einen Mauszeiger anzeigen. Um diesen zu Bewegen muss ich die Mausposition abfragen und schaffe es nicht, weil meine Funktionen die Abfrage behindern. | ||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaube wir reden hier gewaltig aneinander vorbei...
Vielleicht ein Fetzerl Code von dir ? |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
hrmpf.
Code: [AUSKLAPPEN] repeat ;<-- das ist die Hauptschleife
cls rect mouseX(),mouseY(),5,5,0 function(übergabewert);eine funktion wird aufgerufen flip until keyhit(1) end ähm, in funktionen kommen keine Hauptschleifen herrein! sonst kommst du zu solchen problemen! |
||
between angels and insects |
![]() |
Seoman |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Graphics3D 640,480,16,1 Global Maus = LoadImage("Maus.bmp") SetBuffer BackBuffer() Repeat ClsColor 0,0,100 Cls Menue() Flip Cls Until KeyHit(1) End Function Button(x,y,w,h,Text$,art) If h < FontHeight() Then h = FontHeight() If w < StringWidth(Text$) Then w = StringWidth(Text$) Color 255,255,255 If MouseOver(x,y,w,h) And MouseDown(1) Then Color 100,100,100 Rect x,y,w,h,1 Color 100,100,100 If MouseOver(x,y,w,h) And MouseDown(1) Then Color 255,255,255 Rect x+1, y+1, w-1, h-1,1 Color 198,198,198 If MouseOver(x,y,w,h) Then Color 100,150,150 ; MouseOver Highlight If MouseDown(1) Then Color 150,150,100 ; PushDown Highlight EndIf Rect x, y, w, h,1 Color 0,0,0 Text x + w/2 - (StringWidth(Text$)/2), y + h/2 - (FontHeight()/2), Text$ If MouseOver(x,y,w,h) And MouseDown(1) If art = 1 Then Start() ElseIf art = 2 Then Optionen() ElseIf art = 3 Then End EndIf EndIf End Function Function MouseOver(x,y,w,h) If MouseX() > x And MouseX() < x+w And MouseY() > y And MouseY() < y+h Then Return 1 End Function Function Menue() Button(100,50,200,80,"Spiel starten",1) Button(100,140,200,80,"Optionen",2) Button(100,230,200,80,"Ende",3) If KeyHit(1) Then End EndIf End Function Function Start() Locate 50,50 Print "Start" End Function Function Optionen() Locate 30,140 Print "Optionen" End Function ;Etwas in der Art: Function Maus() If MouseXSpeed < 0 Or MouseXSpeed > 0 Or MouseYSpeed < 0 Or MouseYSpeed > 0 Then Mausx = MouseX Mausy= MouseY DrawImage Maus, Mausx, Mausy EndIf End Function End Das Button-System stammt von einem Button Tutorial, ich schreibs wegen des Copyrights und meinen Bedürfnissen noch weiter um (Eigentlich wars noch anders). Ich möchte sehen, wo sich meine Maus befindet, sprich einen Mauszeiger "malen". Ich weiß, so geht es gar nicht! ist nur zu demonstrativen Zwecken. |
||
![]() |
Michi1988 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ohhh mach da doch nich so einen Stress, wenn du einmal pro Schleife
die Mx und My abfragst, wird das reiichen. Code: [AUSKLAPPEN] graphics 800,600
setbuffer backbuffer() Dim button(10) Maus=loadimage("Maus.bmp") for steps=1 to 10 button(steps)=loadimage("Button "+steps"+.bmp") next repeat mx=mousex() my=mousey() for steps=1 to 10 drawimage button(steps),300,100+steps*20 next drawimage Maus,mx,my if mousehit(1) then for steps=1 to 10 if rectsoverlap(mx,my,1,1,300,100+steps*20,200,15) then blablabla=1 next end if flip cls until keyhit(1) Das mit der Abfrage muss man wegen dem Array noch ändern aber passt schon. Michi |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] maus=loadimage("maus.bmp") Repeat ClsColor 0,0,100; könnte auch vor die Hauptschleife... Cls Menue() Drawimage maus, Mousex(),mousey() ;schwupp: ein Mauszeiger Flip ;Cls unnötig Until KeyHit(1) End |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich hoffe mal, es funzt ![]() ist auch ein wenig schwer, für dein alter! Code: [AUSKLAPPEN] Graphics3D 640,480,16,1
Global Maus = LoadImage("Maus.bmp") SetBuffer BackBuffer() ClsColor 0,0,100 Repeat Cls Mausupdate() Menue() Flip Until KeyHit(1) End Function Button(x,y,w,h,Text$,art) If h < FontHeight() Then h = FontHeight() If w < StringWidth(Text$) Then w = StringWidth(Text$) Color 255,255,255 If MouseOver(x,y,w,h) And MouseDown(1) Then Color 100,100,100 Rect x,y,w,h,1 Color 100,100,100 If MouseOver(x,y,w,h) And MouseDown(1) Then Color 255,255,255 Rect x+1, y+1, w-1, h-1,1 Color 198,198,198 If MouseOver(x,y,w,h) Then Color 100,150,150 ; MouseOver Highlight If MouseDown(1) Then Color 150,150,100 ; PushDown Highlight EndIf Rect x, y, w, h,1 Color 0,0,0 Text x + w/2 - (StringWidth(Text$)/2), y + h/2 - (FontHeight()/2), Text$ If MouseOver(x,y,w,h) And MouseDown(1) If art = 1 Then Start() ElseIf art = 2 Then Optionen() ElseIf art = 3 Then End EndIf EndIf End Function Function MouseOver(x,y,w,h) If MouseX() > x And MouseX() < x+w And MouseY() > y And MouseY() < y+h Then Return 1 End Function Function Menue() Button(100,50,200,80,"Spiel starten",1) Button(100,140,200,80,"Optionen",2) Button(100,230,200,80,"Ende",3) If KeyHit(1) Then End End Function Function Start() Text 50,50,"Start" End Function Function Optionen() Locate 30,140 Print "Optionen" End Function ;Etwas in der Art: Function Mausupdate() Mausx = MouseX() Mausy= MouseY() DrawImage Maus, Mausx, Mausy EndIf End Function End |
||
between angels and insects |
![]() |
Seoman |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für die schnellen Antworten. Ich habe mich für Jans Möglichkeit entschieden. Die Lösung ist sehr gut. Ich habe noch das MausUpdate() nach Menue() gesetzt, damit die Maus über den Buttons angezeigt wird. Ganz vielen Dank euch allen.
mfg Seoman |
||
![]() |
Seoman |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eine Frage noch:
Was bewirken die Klammern bei Mausx=Mousex() Denn ich hatte etwas ähnliches, nur ohne Klammern, da bewegte sich das Bild nicht, und ich habe bei deinem mal die Klammern weggemacht und das Bild bleibt auch an seinem angestammten Platz... ![]() ![]() ![]() |
||
![]() |
dominik |
![]() Antworten mit Zitat ![]() |
---|---|---|
wenn klammern hinter einem befehl stehe hießt das immer das ein wert zurückgegeben wird. | ||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
wenn du es ohne () schreibst, ist eine keine function sondern eine Procedir, aber diese abfrage ist eine function, --> () müssen dabeistehen | ||
between angels and insects |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group