feldmausabfrage per xy und nicht per collidedimage

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Eisrabe

Betreff: feldmausabfrage per xy und nicht per collidedimage

BeitragSo, Feb 01, 2004 8:30
Antworten mit Zitat
Benutzer-Profile anzeigen
ja ich weiss, besser wärs mit collidedimages aber ich habe noch nicht alle felder der spielfeldmap sepretiert und daraus images gemacht, also habe ich immo nur die ganze map und frage ab, ob mit der maus auf ein rect eines feldes der map geklickt wurde. das soll erstmal reichen, bis der grundstock des spiels funktioniert. allerdings macht er einfach nicht was ich will. hier mal der code für die maus-coordinaten-checks
Code: [AUSKLAPPEN]
Function klick()
  While lmt = 0            ; schleife solange bis linke maustaste gedrückt wird
   LMT = MouseHit(1)   
   If lmt= 1 Then          ; falls links gedrückt...
     MausX = MouseX()
     MausY = MouseY()
     If zw(mausx,800,860) And zw(mausy,50,80) Then End    ; exitbutton
     For f=1 To 36      ; jetzt abchecken der coordinaten aller 36 felder
       If zw(mausx,textfeld_x(f),textfeld_y(f)) And zw(mausy,textfeld_x(f)+39,textfeld_y(f)+19) Then  ; prüft of mauscoords zwischen den gespeicherten coords der rects der spielfelder
         rueckgabe = f     ;  die nr des felds
       EndIf
     Next
     Color 255,255,255 : Rect 785,490,70,30     ; kontrollausgabe
     Color 0,0,0:Text 785,490, "textfeld= "+f     ; erst feld löschen dann die nummer des feldes hinschreiben, dass übergeben werden soll
     If rueckgabe = 0 Then lmt = 0   ; fall kein rect angeklickt wurde, also irgendwo auf der map
   EndIf
  Wend
  Return rueckgabe   ; soll eigentlich die angeklickte feldnummer rückgen, tuts aber nicht
End Function

Function zw(a,b,c)  ; prüft ob a zwischen b und c
  If a >= b And a <=c Then
    Return True
  Else
    Return False
  EndIf
End Function
 

der wert rückgabe ist sogar mal 37. das geht ja eigentlich garnicht

ps: ich hab echte probleme ne einfach vernünftige maussteuerung hinzubekommen. da gibts doch bestimmt ein grundmodell, dass man an seine bedürfnisse anpassen kann, oder?
ich habe einCode: [AUSKLAPPEN]
GOTO
und ich bin bereit es einzusetzen!
  • Zuletzt bearbeitet von Eisrabe am So, Feb 01, 2004 18:00, insgesamt einmal bearbeitet

Blatolo

BeitragSo, Feb 01, 2004 11:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
 Color 0,0,0:Text 785,490, "textfeld= "+f

ich denke du musst statt f rueckgabe anzeigen lassen.
da du ja außerhalb der schleife den text ausgibst.
 

Eisrabe

BeitragSo, Feb 01, 2004 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
ahh du meinst die anzeige. ja, da hast du recht.
aber warum hat rueckgabe nicht den reichtgen wert? immerhin soll ja rueckgabe den wert von f speichern, wenn es tatsächlich x und y übereinstimmungen gibt

ich habe es gecheckt, ob irgendwas mit den coordinaten durcheinandergekommen ist, aber die variablen textfeld_x(f) und textfeld_y(f) haben alle die richtigen werte

ACK, ich dummi
Code: [AUSKLAPPEN]
 If zw(mausx,textfeld_x(f),textfeld_y(f)) And zw(mausy,textfeld_x(f)+39,textfeld_y(f)+19) Then


ich sollte natürlich nur x und nur y prüfen und nicht mischen :
correct:
Code: [AUSKLAPPEN]
 If zw(mausx,textfeld_x(f),textfeld_x(f)+39 And zw(mausy,textfeld_y(f)),textfeld_y(f)+19) Then
ich habe einCode: [AUSKLAPPEN]
GOTO
und ich bin bereit es einzusetzen!

Blatolo

BeitragSo, Feb 01, 2004 18:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
If zw(mausx,textfeld_x(f),textfeld_y(f)) And zw(mausy,textfeld_x(f)+39,textfeld_y(f)+19)

Das versteh ich nicht ganz.
Wie soll ein Punkt zwischen x und y Koordinate liegen?
versuch mal das
Code: [AUSKLAPPEN]
If zw(mausx,textfeld_x(f),textfeld_x+39(f)) And zw(mausy,textfeld_y(f)+39,textfeld_y(f)+19)


edit: Haste schon selbst rausgekriegt
Funktioniert es denn jetzt?

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Feb 01, 2004 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
ich hab echte probleme ne einfach vernünftige maussteuerung hinzubekommen

da würde ich vorschlagen das so zu machen,
wenn du das als vernünftige maussteuerung verstehst

Nutze den Befehl von Blitz für diese Art der Abfragen.
Der basiert nicht auf auf images, sondern prüft die Kollision zwischen 2 Rechtecken.
Anstatt der Maus setzt du einfach ein Rechteck 1x1 Pixel groß
RECTSOVERLAP (X1, Y1, Breite1, Höhe1, X2, Y2, Breite2, Höhe2)

Buttonabfrage:Code: [AUSKLAPPEN]
 If RectsOverlap (800, 50, 60, 30, MausX , MausY, 1, 1) Then End ; exitbutton

Tile - Abfrage:Code: [AUSKLAPPEN]
If RectsOverlap (textfeld_x(f),textfeld_y(f), 39, 19, MausX , MausY, 1, 1)Then  ; prüft of mauscoords zwischen den gespeicherten coords der rects der spielfelder

würde die
Code: [AUSKLAPPEN]
Function zw(a,b,c)  ; prüft ob a zwischen b und c

überflüssig machen
[BB2D | BB3D | BB+]
 

Eisrabe

BeitragMo, Feb 02, 2004 3:58
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, es funktioniert jetzt

du hast recht Rallimen, aber die rectsoverlap-function braucht mehr parameter als meine methode. und im grunde ist das eh das selbe.
was ich mit verkorkster maussteuerung meine, ist, dass BB nicht "versteht" dass ein OBJEKT (rect oder image) "angeklickt" wurde und es immer "zu fuss" abgefragt werden muss. ausserdem habe ich auch strukturelle probleme, dass nicht in jeder situation alles angewählt werden können darf.

ich bin immer über deine posts glücklich Rallimen. immer weiter. und schau dir mal mein projekt im projekte-teil des forums an. ich traue mich nicht ganz den code zu posten, denn der ist bestimmt low-low-low-quali Sad aber ist sozusagen mein ersten projekt.
ich habe einCode: [AUSKLAPPEN]
GOTO
und ich bin bereit es einzusetzen!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group