Mousehit-Problem

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Bigfreddy

Betreff: Mousehit-Problem

BeitragDo, Feb 24, 2005 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab keine Ahnung, warum mir die Lösung nicht einfällt(, vielleicht, weil ich beim Landesfestval NM unter Zeitdruck steh)

Also hier der Code:



Code: [AUSKLAPPEN]

Function spiel()

Bildhoehe=400
Bildbreite=300

Local freddy,malik,bild,zeit,druck1,druck3,score

freddy=LoadImage("C:\Blitzbasic\bin\freddy_bild.bmp")
malik=LoadImage("C:\Blitzbasic\bin\malik_bild.bmp")
zeit=3000


 
Repeat
SetBuffer BackBuffer()
Color 255,255,255
ClsColor 0,0,0
Cls
Delay 200
Rect 20,20,bildbreite+5,bildhoehe+5
Rect 450,20,bildbreite+5,bildhoehe+5

bild=Rnd(0,1)

If bild=0 Then DrawImage malik,23,23
If bild=1 Then DrawImage freddy,453,23

Color 255,255,0
Text 40,500,"Punktestand: "+score

Flip

MouseHit(1)
MouseHit(3)

anfang=MilliSecs()
While MilliSecs()<anfang+zeit
Wend

SetBuffer BackBuffer()
Cls
Text 20,50,""+MouseHit(1)
Text 200,50,""+MouseHit(3)
Flip
Delay 200

Until KeyHit(1)
auswahl_menue

End Function 


Hier:
Text 20,50,""+MouseHit(1)
Text 200,50,""+MouseHit(3)
zeigt er (meistens (nur ganz selten mal)) nur Nullen an!

Ich hoffe auf schnelle Hilfe!

Und sag schonmal Danke!

Spikespine

BeitragDo, Feb 24, 2005 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja weil du nicht draufdrückst auf die maus nehm ich an...
wenn du draufdrückst wird doch wahrscheinlich 200 millisekunden eine 1 angezeigt, oder?
naja, abgesehen davon ist der code auch müll. Mehrmals in einer schleife Clst du und flipst...
 

D²O

BeitragDo, Feb 24, 2005 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
vieleicht weil Mousehit() nur einmal min der schleife aktiviert ist und beim nächsten schleifendurchgang wieder 0 ist, auch wenn die Mousetaste immer noch gedrückt ist Wink

Der schleifen durchgang ist so schnell das Dein Auge das gar nicht mit bekommt das da mal ne 1 war.

Benutzmal anstatt mousehit() das Mousedown() dan wirst Du sehen das sich doch was Tut oder mach einen counter ala "if moushit() Then a = a + 1"

Dann solltest Du die Funktionen lieber einer Variablen übergeben,
mouse1 = mousehit(1)..
...


Aber ich Denke, wenn man so den Code anschaut, musst Du noch einiges Lernen Wink
(Ist nicht Böse gemeint Smile )
Blitz+; Blitz3d; BlitzMax; GLBasic; Purebasic;
GameMaker Studio 1.4xx; AGK;

StarGazer

BeitragFr, Feb 25, 2005 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Soviel ich festgestellt habe, kann in einem Programdurchlauf "MouseHit(x)" nur einmalig abgefragt werden. Fragst Du also mehrfach z.B "MouseHit(1)" ab, wird es nur in der ersten Abfrage funktionieren, in den anderen jedoch nicht mehr, und MouseHit liefert dann eine 0 zurück.
Willst Du also mehrfach MouseHit(x) abfragen, lege Dir, wie D²O es schon erwähnte, eine Varibale dafür ab, am besten eine Globale, dann kannst Du den MouseHit auch in Funktionen abfragen. Bei einer Globale solltest Du jedoch am Ende des Programms die Variable wieder auf 0 setzten, sonst wenn MouseHit einmal aktiviert wurde, würde das Program denken, daß MouseHit immer aktiv ist.

oder am besten in der Mainschleife es so lösen
Code: [AUSKLAPPEN]
Globale MausHit1

If MouseHit(1) Then MausHit1 = True Else MausHit1 = False

Spikespine

BeitragFr, Feb 25, 2005 22:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, das ist nicht ganz korrekt: Mousehit(1) ist ein Speicher, der die Anzahl der Mausklicks seit dem letzten Aufruf speichert...

Spike

D2006

Administrator

BeitragSa, Feb 26, 2005 0:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Benutzung der user posted imageSuche hätte folgendes hervorgebracht:
https://www.blitzforum.de/viewtopic.php?t=8345

Wäre dementsprechend mal nicht schlecht, wenn man diese tolle Suche auch benutzen würde ... Rolling Eyes

MfG
D2006

Spikespine

BeitragSa, Feb 26, 2005 11:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Und was ist mit diesem Code?
Code: [AUSKLAPPEN]
Delay 5000
Print MouseHit(1)
Delay 2000
Print MouseHit(1)
WaitKey


Die neue MouseHit(1)-Abfrage löscht den speicher wieder. Weil, wenn Mousehit(1) in einer Schleife steht, in einem Bruchteil einer Sekunde Mousehit(1) abgefragt wird, ist der Speicher praktisch ständig 0, es sei denn man drückt die linke Maustaste, dann wird Mousehit(1) für einen Schleifendurchlauf 1 (oder mehr, falls man schnell klicken kann)

korrigiert mich, falls ich falsch liege

Spike
 

Bigfreddy

BeitragSo, März 06, 2005 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Also erstmal wollt ich mich für die Antworten bedanken...
DANKE!

Ich weiß auch nicht was da los war, ich hab da schon ein paar Stunden programmiert und war höllisch gestresst, wie gesagt das musste bis zum nächsten Tag fertig werden ( aber nicht nur des, nicht das ihr meint des war nur dieses kleine Spiel ) ... wir haben die ganze Nacht durch programmiert und kamen auf rund 16 Stunden dauer programmiert...

Ergebnis: rund 1000 Zeilen
und 4.Platz (die anderen ham mit Flash oder ähnlichem
gearbeitet => viel weniger Zeitaufwand als alles selber zu
programmieren und die "Jury" waren andere Teilnehmer)

Also in diesem Sinne verzeit mir...!

MfG, Bigfreddy

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group