Problem mit If Abfrage(n) in einer Schleife
Übersicht

Gray FoxBetreff: Problem mit If Abfrage(n) in einer Schleife |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Habe folgendes Problem: Ich bastel grad an einer kleinen WiSim. Ich habe mich "beim Handeln" von Fugger 2 inspirieren lassen d.h. fahre ich mit der Maus im Handelsmenü über "die Mengenanzahl" soll sich der Mauszeiger verändern, Entweder soll ein + am oberen Ende der Zahl oder ein Minus am unteren Ende der Zahl erscheinen.
Ich habe 4 Zahlen, die Funktion "Wert hoch/runter" funktioniert, aber nur bei der der letzten Zahl verändert sich der Mauszeiger. Code: [AUSKLAPPEN] For i = 4 To 7
If ImageRectCollide(maus_zeiger,mx,my,0,x_temp(i),y_temp(0),10,10) Then maus_status = 2 If mouse = 1 Then If warenlager_handel(i) < 9 Then warenlager_handel(i) = warenlager_handel(i) + 1 End If Select i Case 4 warenlager_handel(3) = warenlager_handel(3) + 1000 Case 5 warenlager_handel(3) = warenlager_handel(3) + 100 Case 6 warenlager_handel(3) = warenlager_handel(3) + 10 Case 7 warenlager_handel(3) = warenlager_handel(3) + 1 End Select End If Else If ImageRectCollide(maus_zeiger,mx,my,0,x_temp(i),y_temp(0)+10,10,10) Then maus_status = 1 If mouse = 1 Then If warenlager_handel(i) > 0 Then warenlager_handel(i) = warenlager_handel(i) - 1 End If End If Else maus_status = 0 End If End If Next Code in der Hauptschleife: Code: [AUSKLAPPEN] DrawImage maus_zeiger,mx,my,0
DrawImage mauszeiger,mx,my,maus_status Vielleicht sieht einer was ich falsch mache? Zur Info: Ich zeichne den Mauszeiger und einen 4 Pixel großen Maus_Zeiger mit dem ich die "Kollisonsabfragen mache. |
||
![]() |
TheMatrix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gib mal den ganzen Code, vielleicht ist es dann ersichtlicher? | ||
°_° °.° °~° °v° .. -.- |
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
TheMatrix hat Folgendes geschrieben: Gib mal den ganzen Code, vielleicht ist es dann ersichtlicher?
Vielleicht hilft auch der Hinweis, sobald ich " maus_status = 0 " ausklammere, funktioniert es wie es soll. Nur das Problem ist dann, dass sich der Mauszeiger zwar verändert, aber er kehrt nach Verlassen der Schaltfläche nicht mehr in den "Urzustand" zurück. Versteht ihr was ich meine? Falls das nicht hilft, werde ich den Code posten. |
||
AvaGastBetreff: Re: Problem mit If Abfrage(n) in einer Schleife |
![]() Antworten mit Zitat |
|
---|---|---|
Gray Fox hat Folgendes geschrieben: Code: [AUSKLAPPEN]
DrawImage maus_zeiger,mx,my,0
DrawImage mauszeiger,mx,my,maus_status Zur Info: Ich zeichne den Mauszeiger und einen 4 Pixel großen Maus_Zeiger mit dem ich die "Kollisonsabfragen mache. Hallöchen, also Du brauchst ein Image, das Du lediglich zur Kollisionsprüfung nimmst, nicht zeichnen! - und solltest Du auch nicht tun, wenn es darüber hinaus keinen grafischen Nutzen hat. *zwinker* Im Übrigen ganz schlimmer Spaghetti-Code, wenn ich das mal so äussern darf ... Dein Probem liegt aber eigentlich auf der Hand: Du durchläuftst eine Schleife, überprüfst dort bestimmte Bedingungen und setzt dann den Maus_Status entsprechend. Letztendlich wird der Maus_Status aber immer wieder auf 0 zurückgesetzt, wenn die Bedingung eines nächsten Schleifen- Loops nicht erfüllt ist! - von daher klappt Dein Funktionsblock (wie Du es auch selbst schon erkannt hast) nur bei der letzten Abfrage ... da musst Du grundsetzlich nochmal Deine Logik überdenken ... ^^ Die einfachste Möglichkeit wäre, dass Du das Zurücksetzen der Maus_Status Variable aus dem Bedingungsblock herausnimmst und es direkt vor den Schleifenbeginn positionierst. Code: [AUSKLAPPEN] maus_status = 0
For i = 4 To 7 If ImageRectCollide(maus_zeiger,mx,my,0,x_temp(i),y_temp(0),10,10) Then maus_status = 2 If mouse = 1 Then If warenlager_handel(i) < 9 Then warenlager_handel(i) = warenlager_handel(i) + 1 End If Select i Case 4 warenlager_handel(3) = warenlager_handel(3) + 1000 Case 5 warenlager_handel(3) = warenlager_handel(3) + 100 Case 6 warenlager_handel(3) = warenlager_handel(3) + 10 Case 7 warenlager_handel(3) = warenlager_handel(3) + 1 End Select End If Else If ImageRectCollide(maus_zeiger,mx,my,0,x_temp(i),y_temp(0)+10,10,10) Then maus_status = 1 If mouse = 1 Then If warenlager_handel(i) > 0 Then warenlager_handel(i) = warenlager_handel(i) - 1 End If End If End If End If Next + AvA + |
||
Gray FoxBetreff: Re: Problem mit If Abfrage(n) in einer Schleife |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ava hat Folgendes geschrieben: Gray Fox hat Folgendes geschrieben:
Code: [AUSKLAPPEN]
DrawImage maus_zeiger,mx,my,0
DrawImage mauszeiger,mx,my,maus_status Zur Info: Ich zeichne den Mauszeiger und einen 4 Pixel großen Maus_Zeiger mit dem ich die "Kollisonsabfragen mache. Hallöchen, also Du brauchst ein Image, das Du lediglich zur Kollisionsprüfung nimmst, nicht zeichnen! - und solltest Du auch nicht tun, wenn es darüber hinaus keinen grafischen Nutzen hat. *zwinker* Im Übrigen ganz schlimmer Spaghetti-Code, wenn ich das mal so äussern darf ... Dein Probem liegt aber eigentlich auf der Hand: Du durchläuftst eine Schleife, überprüfst dort bestimmte Bedingungen und setzt dann den Maus_Status entsprechend. Letztendlich wird der Maus_Status aber immer wieder auf 0 zurückgesetzt, wenn die Bedingung eines nächsten Schleifen- Loops nicht erfüllt ist! - von daher klappt Dein Funktionsblock (wie Du es auch selbst schon erkannt hast) nur bei der letzten Abfrage ... da musst Du grundsetzlich nochmal Deine Logik überdenken ... ^^ Die einfachste Möglichkeit wäre, dass Du das Zurücksetzen der Maus_Status Variable aus dem Bedingungsblock herausnimmst und es direkt vor den Schleifenbeginn positionierst. Code: [AUSKLAPPEN] maus_status = 0
For i = 4 To 7 If ImageRectCollide(maus_zeiger,mx,my,0,x_temp(i),y_temp(0),10,10) Then maus_status = 2 If mouse = 1 Then If warenlager_handel(i) < 9 Then warenlager_handel(i) = warenlager_handel(i) + 1 End If Select i Case 4 warenlager_handel(3) = warenlager_handel(3) + 1000 Case 5 warenlager_handel(3) = warenlager_handel(3) + 100 Case 6 warenlager_handel(3) = warenlager_handel(3) + 10 Case 7 warenlager_handel(3) = warenlager_handel(3) + 1 End Select End If Else If ImageRectCollide(maus_zeiger,mx,my,0,x_temp(i),y_temp(0)+10,10,10) Then maus_status = 1 If mouse = 1 Then If warenlager_handel(i) > 0 Then warenlager_handel(i) = warenlager_handel(i) - 1 End If End If End If End If Next + AvA + Dank erstmal für deine Antwort ( Scheiß Logik ![]() Zu deinen Anmerkungen: Wenn ich den "richtigen" Mauzeiger anstelle des 4*4 Pixel großen Bildes für die "Imagerectcollide" Abfrage benutze, habe ich das Problem, dass bei einem Mausklick gleich mehrere Zähler nach oben gehen, da die "Abfragevierecke" der Zahlen so nahe beieinander liegen. Warum Spaghetti-Code, sprichst du damit die Formatierung an? Falls ja, daran ist das Forum schuld nicht ích ![]() Aber ich habe mich schon verbessert ![]() |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Du sollst ja auch nicht den richtigen Mauszeiger für den Collisionscheck verwenden - aber es ist völlig unnötig, dass Du Deinen Collisionscursor zeichnest! (Zitat: "DrawImage maus_zeiger,mx,my,0") Im Übrigen kommt ein ImageRectCollide vollkommen ohne zusätzliche Ressource aus, erfüllt den selben Zweck genauso gut und ist - meine ich - sogar auch noch einen winzigen Tick schneller. ![]() @ Spaghetti-Code ... die Art und Weise, wie Du Deine Bedingungen verschachtel hast ist alles andere als intuitiv zu durchschauen ![]() Freut mich aber, das ich Dir helfen konnte. ![]() + Ava + |
||
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ava hat Folgendes geschrieben: Du sollst ja auch nicht den richtigen Mauszeiger für den Collisionscheck verwenden - aber es ist völlig unnötig, dass Du Deinen Collisionscursor zeichnest! (Zitat: "DrawImage maus_zeiger,mx,my,0") Im Übrigen kommt ein ImageRectCollide vollkommen ohne zusätzliche Ressource aus, erfüllt den selben Zweck genauso gut und ist - meine ich - sogar auch noch einen winzigen Tick schneller.
![]() @ Spaghetti-Code ... die Art und Weise, wie Du Deine Bedingungen verschachtel hast ist alles andere als intuitiv zu durchschauen ![]() Freut mich aber, das ich Dir helfen konnte. ![]() + Ava + Learning by doing ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group