MausSpeed - Problem [gelöst]

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Thunder

Betreff: MausSpeed - Problem [gelöst]

BeitragMo, Apr 06, 2009 13:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt gibts bei mir ein (meiner Meinung nach) sehr komisches Problem:
Code: [AUSKLAPPEN]

Graphics 800,600,0,2
SetBuffer BackBuffer()
Local x,y   ;Koordinaten
Local timer=CreateTimer(60)
Repeat
   Cls
   If MouseDown(1) And MouseIn(x,y,100,100) Then
      x=x+MouseXSpeed()
      y=y+MouseYSpeed()
   EndIf
   Rect x,y,100,100,0
   Flip 0
   WaitTimer timer
Until GetKey()
End

Function MouseIn(x,y,w,h)
   Local mx=MouseX()
   Local my=MouseY()
   Return (mx>=x)*(my>=y)*(mx<=x+w)*(my<=y+h)
End Function


Bei dem Code sollte man eigentlich, wenn man ins Rechteck hineinklickt, es verschieben können ohne dass der Mauszeiger an die linke obere Ecke des Rechtecks springt. Komischerweise tut er das, deswegen habe ich den Codeabschnitt:
Code: [AUSKLAPPEN]
   
If MouseDown(1) And MouseIn(x,y,100,100) Then
   x=x+MouseXSpeed()
   y=y+MouseYSpeed()
EndIf


genauer angeschaut und bin alles durchgegangen. Wenn MouseXSpeed = MouseYSpeed = 0 dann sollten x und y eigentlich gleich bleiben, oder?
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
  • Zuletzt bearbeitet von Thunder am Mo, Apr 06, 2009 13:17, insgesamt einmal bearbeitet

M0rgenstern

BeitragMo, Apr 06, 2009 13:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich hab das immer anders gelöst.
Ich bin hingegangen und hab folgendes gemacht:

Code: [AUSKLAPPEN]

If MouseDown(1) And MouseX() > x And MouseY() > y And MouseX() < (x+100) And MouseY() < (y+100) Then
.
.
.

Also Nach diesem Prinzip jedenfalls... Dann KANN man nur in dem rechteck liegen.

Kannst du ja mal versuchen (ob mans genauso schreiben kann weiß ich jetzt auswendig nicht, müsste ich testen, aber ich hoffe du erkennst das Prinzip.)

Lg, M0rgenstern

Noobody

BeitragMo, Apr 06, 2009 13:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Graphics 800,600,0,2
SetBuffer BackBuffer()
Local x,y   ;Koordinaten
Local timer=CreateTimer(60)
Repeat
   Cls
   XSpeed = MouseXSpeed()
   YSpeed = MouseYSpeed()
   If MouseDown(1) And MouseIn(x,y,100,100) Then
      x=x+XSpeed
      y=y+YSpeed
   EndIf
   Rect x,y,100,100,0
   Flip 0
   WaitTimer timer
Until GetKey()
End

Function MouseIn(x,y,w,h)
   Local mx=MouseX()
   Local my=MouseY()
   Return (mx>=x)*(my>=y)*(mx<=x+w)*(my<=y+h)
End Function


MouseXSpeed und MouseYSpeed liefern die Geschwindigkeit zwischen dem jetzigen und dem letzten Aufruf zurück - wenn du es nur aufrufst, wenn die Maus im Rechteck liegt und die Maustaste gedrückt bleibt, kommen die Werte immer so raus, dass die linke obere Ecke deines Rechtecks an die Mausposition verschoben wird.
Rufe es einfach jedesmal in der Hauptschleife auf und das Problem erledigt sich.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

Thunder

BeitragMo, Apr 06, 2009 13:15
Antworten mit Zitat
Benutzer-Profile anzeigen
@Morgenstern: Das ist mein Code, nur anders geschrieben.

thx Noobody
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

M0rgenstern

BeitragMo, Apr 06, 2009 13:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß dass es eigentlich das selbe ist.
Aber ich hab manchmal bei BLitz einfach das Gefühl dass es bei einigen Dingen rumzickt und wenn mans ein wenig umstellt dann passierts nimmer.
 

FWeinb

ehemals "ich"

BeitragMo, Apr 06, 2009 13:45
Antworten mit Zitat
Benutzer-Profile anzeigen
@M0rgenstern
Blitz hat nicht rumgezick es ist einfach so das es ein Denkfehler von Thunder war, die Geschwindiegkeit der Maus, genau dann abzufragen wenn es im Kasten ist.

Hat Noobody aber eigentlich schon sehr gut erklärt.

mfg

ich
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group