hmmm... sowas wie Rückschlag... unbeschreibliches problem

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Chrise

Betreff: hmmm... sowas wie Rückschlag... unbeschreibliches problem

BeitragDi, Feb 20, 2007 1:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo^^

Ich hab ne Frage, wäre nett wenn die Antwort schnell kommt, weil ich noch bisschen was vor hab heute Wink

Ich hab Knöpfe gemacht, wenn man mit der Maus drüber fährt, verändern sie sich. Wenn man draufklickt auch, dann sind sie aktiviert.
Mein Problem ist...
Ich habe eine Variable, die ich bei nicht-aktivität 0 ist und bei aktivität 1 ist.
Ich frage ab ob sie 1 ist, wenn ich auf den knopf drücke und setze bei zutreffen auf 0. Bei 0 auf 1.
Nur ist das bei mri jetzt so, dass der so schnell zwischen 0 und 1 wechselt, dass der Knopf selten richtig funktioniert, meistens nur bei extrem kurzem drücken.
Wenn ich aber ein delay dahinter mache, ruckeln die bilder dann immer...

wie mache ich das richtig?

Bitte um hilfe.

thx
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

FireballFlame

BeitragDi, Feb 20, 2007 2:18
Antworten mit Zitat
Benutzer-Profile anzeigen
MouseHit benutzen anstatt MouseDown? ^^
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Chrise

BeitragDi, Feb 20, 2007 12:19
Antworten mit Zitat
Benutzer-Profile anzeigen
fett, dachte das wäre nur für zeitmessung oder so da oO^^
echt vielmals thx Smile
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.
 

Yogu

BeitragDi, Feb 20, 2007 14:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du ganz am Schluss der Hauptschleife FlushKeys und FlushMouse einfügst, kann dir das gar nicht mehr passieren, weil dann der MouseDown-Event gelöscht wird.

FireballFlame

BeitragDi, Feb 20, 2007 20:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein. So ist das auch nicht gedacht.
FlushMouse und FlushKeys sind dazu da, nach Ladevorgängen ausgeführt zu werden, damit der ungeduldige User, der während des Ladens irgendwas drückt, nicht anschließend damit zig Aktionen auslöst.

@TS: MouseHit gibt zurück, ob die Maustaste gerade gedrückt wird. MouseDown gibt zurück, ob sie gedrückt IST Wink
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit
 

Yogu

BeitragDi, Feb 20, 2007 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Was ist der Unterschied zwischen gedrückt sein und gedrückt werden? Also, wenn du meinst, dass werden die Zukunftsform ist, dann ist das sehr unglaubwürdig. Mir ist nicht bekannt, dass BlitzBasic in die Zukunt sehen kann.

StepTiger

BeitragDi, Feb 20, 2007 21:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut!

MouseHit fragt ab, ob die Taste seit der letzten Abfrage von MouseHit schon mindestens ein Mal oben und wieder unten war.
MouseDown fragt ab, ob die Maustaste während der Abfrage gerade gedrückt ist.
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

BladeRunner

Moderator

BeitragMi, Feb 21, 2007 11:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Mousehit: wurden ein oder mehrere Mausklicks durchgeführt ? (Maustaste drücken und wieder loslassen)

Mousedown: ist die Maustaste gedrückt gehalten (vergleiche 'draggen' von Objekten mit gedrückter Maustaste)
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

FireballFlame

BeitragMi, Feb 21, 2007 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Yogu hat Folgendes geschrieben:
Was ist der Unterschied zwischen gedrückt sein und gedrückt werden? Also, wenn du meinst, dass werden die Zukunftsform ist, dann ist das sehr unglaubwürdig. Mir ist nicht bekannt, dass BlitzBasic in die Zukunt sehen kann.

So, und jetzt erkläre ich nochmal meine Erklärung Wink

Gedrückt WERDEN ist ein Ereignis (tritt genau in dem Moment, in dem ich die Taste herunterdrücke, einmal auf).
Gedrückt SEIN ist ein Zustand (und währt solange, bis ich die Taste wieder loslasse).

Mit Zukunft hat das gar nichts zu tun. Das ist ein Passiv. Kannst ja mal hier nachlesen Wink
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Chrise

BeitragMi, Feb 21, 2007 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Jauw^^
Ihr habt zwischendurch schon soweit, dass ihr es geschafft habt mein nächstes problem anzusprechen Mr. Green
Und zwar Flushmouse.
Joa,
mein Problem ist, dass ich bisher ein Programm habe, aber oft noch bugs dadurch verursacht werden, wenn man z.b. einen Knopf verfehlt und Maus drückt und dann über einen nächsten Knopf drüberfährt der dann unwollend aktiviert wird.
Wenn ich jetzt aber Flushmouse vor jedem Knopf Code mache, dann funktionieren die Knöpfe ncihtmehr... wenn ihr versteht was ich meine.
Das will ich aber verhindern, weiß aber ned wie ich das machen soll....

plz help.
thx Smile
Chrise
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

BladeRunner

Moderator

BeitragMi, Feb 21, 2007 22:33
Antworten mit Zitat
Benutzer-Profile anzeigen
flushmouse ist da wie schon erwähnt der falsche weg.
Ich kann nur spekulieren wie dein code aussieht, aber eigentlich sollte bei einem vernünftigen Buttonaufbau nur dann ein Feld aktiviert werden wenn du es wirklich anklickst.
Wie wäre es wenn du uns mit etwas Code fütterst ?
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

Chrise

BeitragMi, Feb 21, 2007 22:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
;LINKER PFEIL
If RectsOverlap(xmaus,ymaus,1,1,20,Ph,28,22) Then
If MouseHit(1) Then
Pfeilauswahl=Pfeilauswahl-1

If Pfeilauswahl=-1 Then
Pfeilauswahl=6
EndIf

DrawImage Pfl,20,Ph,2
Else
DrawImage Pfl,20,Ph,1
EndIf
Else
DrawImage Pfl,20,Ph,0
End If

;RECHTER PFEIL
If RectsOverlap(xmaus,ymaus,1,1,150,Ph,28,22) Then
If MouseHit(1) Then
Pfeilauswahl=Pfeilauswahl+1

If Pfeilauswahl=7 Then
Pfeilauswahl=0
EndIf

DrawImage Pfr,150,Ph,2
Else
DrawImage Pfr,150,Ph,1
EndIf
Else
DrawImage Pfr,150,Ph,0
End If

;ZOOM1 KNOPF
If RectsOverlap(xmaus,ymaus,1,1,64,Prl,28,22) Then
If MouseHit(1) Then
zoomAuswahl=1
DrawImage Zoom1,64,Prl,2
Else
If ZoomAuswahl<>1 Then
DrawImage Zoom1,64,Prl,1
Else
DrawImage Zoom1,64,Prl,2
EndIf
EndIf
Else
If ZoomAuswahl<>1 Then
DrawImage Zoom1,64,Prl,0
Else
DrawImage Zoom1,64,Prl,3
EndIf
End If

;ZOOM2 KNOPF
If RectsOverlap(xmaus,ymaus,1,1,92,Prl,28,22) Then
If MouseHit(1) Then
zoomAuswahl=2
DrawImage Zoom2,92,Prl,2
Else
If ZoomAuswahl<>2 Then
DrawImage Zoom2,92,Prl,1
Else
DrawImage Zoom2,92,Prl,2
EndIf
EndIf
Else
If ZoomAuswahl<>2 Then
DrawImage Zoom2,92,Prl,0
Else
DrawImage Zoom2,92,Prl,3
EndIf
End If



Hmmm also die einzelnen Bilder der Knöpf sind meistens 4. Einmal ohne das man mit der Maus drüber ist. Dann einmal mit der Maus drüber und nicht geklickt, einmal mit Maus drüber und geklickt udn einmal nicht darüber aktiviert.
Joa, dass sind z.b. jetzt mal nur die visuellen dinge der Knöpfe.
Das andere hab ich woanders... kann es vll daran liegen, dass ich die falsch aufgeteilt hab?

thx
Chrise
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

BladeRunner

Moderator

BeitragMi, Feb 21, 2007 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Frag zu Beginn deiner Mainloop einmal mousehit ab und speichere es in einer Variable:
mh = mousehit(1)

dann prüfst du immer auf mh.

Das Problem: Mousehit wird beim auslesen auf 0 gesetzt. Wenn also die erste Bedingung zutrifft liesst er MH aus und nullt es dabei. Spätere Abfragen können also nicht mehr zutreffen.

Zudem würde ich dir empfehlen einmal zu beginn des Blockes auf mh zu prüfen und nur wenn das positiv ist auf die einzelnen overlaps hin. Das ist wesentlich schneller, da Du dir im Falle dass kein Mousehit vorliegt einíge Abfragen ersparst.

EDIT: Vergiss das mit dem Mousehit zuerst, ich überluß dass Du ja auch schon ein Überfahren anders darstellen willst. Dann ist deine Reihenfolge die sinnigere.
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
  • Zuletzt bearbeitet von BladeRunner am Mi, Feb 21, 2007 22:45, insgesamt einmal bearbeitet

Chrise

BeitragMi, Feb 21, 2007 22:45
Antworten mit Zitat
Benutzer-Profile anzeigen
puh, klingt glaub ich komplizierter als es ist^^
kannste bitte nen kleinen beispielcode zeigen wie du das genau meinst?
wäre wirklich hilfreich, weil sonst blick ich das ned ganz.
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

BladeRunner

Moderator

BeitragMi, Feb 21, 2007 22:50
Antworten mit Zitat
Benutzer-Profile anzeigen
ganz simpel:
Code: [AUSKLAPPEN]
repeat
    if mousehit(1) then bla()
    if mousehit(1) then blub()
until keyhit(1)

-> hier wird in 99 % der Fälle nur bla ausgeführt, da danach mousehit wieder auf 0 gesetzt ist. Die wahrswcheinlichkeit dass du genau zwischen den beiden Befehlen die Maus drückst ist eher gering.
Code: [AUSKLAPPEN]
repeat
    mh = mousehit(1)

    if mh then bla()
    if mh then blub()
until keyhit(1)

hier werden beide ausgeführt, da mh den klick speichert und er somit nicht nach dem ersten if verloren geht.
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

Chrise

BeitragMi, Feb 21, 2007 23:39
Antworten mit Zitat
Benutzer-Profile anzeigen
und du meinstes den unteren der beiden?
Na, dann probier ich das mal aus, vll hilfts Wink
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group