Andauernde Abfrage

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Seoman

Betreff: Andauernde Abfrage

BeitragMo, Jul 12, 2004 11:19
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jul 12, 2004 11:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
repeat
  x = mousex()
  y = mousey()
until .......

Seoman

BeitragMo, Jul 12, 2004 11:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber wärend ner Repeat-Schleife läuft das Program ja nicht weiter, sondern eben nur die Schleife, oder?

dominik

BeitragMo, Jul 12, 2004 11:25
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, alles was in der schleife steht.

Bfox

BeitragMo, Jul 12, 2004 11:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Diese Repeat-Schleife ist die Hauptschleife! Rolling Eyes
Also läuft das Programm weiter! Rolling Eyes
Glauben ist Mangel an Wissen!

BladeRunner

Moderator

BeitragMo, Jul 12, 2004 11:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jul 12, 2004 11:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jul 12, 2004 11:28
Antworten mit Zitat
Benutzer-Profile anzeigen
@Seoman, nein BB unterstützt kein Threading von haus aus!
du musst deine Function kleiner Stückeln!
between angels and insects

BladeRunner

Moderator

BeitragMo, Jul 12, 2004 11:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jul 12, 2004 11:35
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

BladeRunner

Moderator

BeitragMo, Jul 12, 2004 11:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jul 12, 2004 11:38
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jul 12, 2004 11:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jul 12, 2004 11:44
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BladeRunner

Moderator

BeitragMo, Jul 12, 2004 11:44
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jul 12, 2004 11:46
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hoffe mal, es funzt Smile

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

BeitragMo, Jul 12, 2004 11:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jul 12, 2004 12:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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... Question Question Question

dominik

BeitragMo, Jul 12, 2004 12:04
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn klammern hinter einem befehl stehe hießt das immer das ein wert zurückgegeben wird.

Jan_

Ehemaliger Admin

BeitragMo, Jul 12, 2004 12:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group