Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 25.04.2011, 10:26 Titel: Problem mit Variable |
|
|
Hey
Hier ein kurzer SourceCode-Auszug:
Code: | If Buttonpressed(201)=201 Then nebel.sw=4
If Buttonpressed(200)=200 Then nebel.sw=2
If nebel.sw=2 Then
player1.money-=200
nebel.sw=3
ElseIf nebel.sw=3 Then
nebel.who="Player"
End If |
Es geht darum, dass wenn ein Button gedrückt wird, dass sich die Variable "player1.money" einmal um 200 verringert, allerdings verringert sie sich kontinuierlich um 200 pro Schleifendurchlauf, obwohl dies ja nur dann der Fall seien sollte, wenn "nebel.sw" auf 2 steht. "nebel.sw" ändert sich allerdings auf 3, was man in dem Codeauszug gut erkennen kann. Das stetige verringern von "player1.money" lässt sich auch nur verhindern, sobald man auf einen anderen Button drückt.
Weiß jemand, wie ich es richtig anstellt, sodass player1.money sich nur einmal um 200 verringert? |
|
Nach oben |
|
 |
MilkFreeze

Anmeldungsdatum: 22.04.2011 Beiträge: 116
|
Verfasst am: 25.04.2011, 10:42 Titel: Re: Problem mit Variable |
|
|
Okay, es geht um einen Mausbutton oder so etwas in der Art? Bedenke wie schnell ein Einzelner Schleifendurchgang sein kann und wie lange im vergleich dazu der buttton gedrückt wird. Kannst du sogar mit einem Simplen Code nachprüfen, aber darum geht es ja hier nicht.
Also, der Button wird gedrückt und bleibt einige Millisekunden gedrückt, in der Zeit wird deine Variable reduziert. Ergo musst du bei Knopfdruck warten, bis der Knopf nicht mehr gedrückt ist, bevor du in der schleife weiter gehst:
Code: | If Buttonpressed(200)=200 Then nebel.sw=2
If nebel.sw=2 Then
player1.money-=200
nebel.sw=3
ElseIf nebel.sw=3 Then
nebel.who="Player"
End If
'Wenn Knopf noch gedrückt...
While(buttonpressed(201) = 201 or buttonpressed(200) = 200)
'Warten:
sleep 1,1
'Hier dann noch der code der buttonpressed() neu füllt:
<placeholder>
wend
|
Ich hoffe das ist verständlich  _________________ Milch ftw 
Zuletzt bearbeitet von MilkFreeze am 25.04.2011, 11:14, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 25.04.2011, 10:46 Titel: |
|
|
Erstmal danke
Schon verständlich, bis auf folgendes:
Code: | 'Hier dann noch der code der buttonpressed() neu füllt: |
Was meinst du damit? |
|
Nach oben |
|
 |
MilkFreeze

Anmeldungsdatum: 22.04.2011 Beiträge: 116
|
Verfasst am: 25.04.2011, 10:57 Titel: |
|
|
Nachfolgend Beispiel anhand von GETMOUSE.
Ich lass die Kommentare mal gleich und pass das ganze nur auf getmouse an:
Code: | screen 12
dim as integer x,y, v_button
dim i as integer
do
getmouse (x,y,, v_button)
if (v_button <> 0) then
print "Klick!"
end if
'Wenn Knopf noch gedrückt...
While(v_button)
'Warten:
sleep 1,1
'Hier dann noch der code der buttonpressed() neu füllt:
getmouse (x,y,, v_button)
wend
loop until inkey = "q" |
Damit du prüfen kannst ob v_button sich ändert oder nicht, musst du natürlich eventuell neue Werte wieder in v_button füllen. Der Code ist übrigens ausführbar und funktioniert. Lass den mal mit der unteren schleife laufen und einmal ohne  _________________ Milch ftw  |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 25.04.2011, 11:05 Titel: |
|
|
Ich hab es jetzt so gemacht:
Code: | If Buttonpressed(201)=201 Then nebel.sw=4
If Buttonpressed(200)=200 Then nebel.sw=2
If nebel.sw=2 Then
player1.money-=200
nebel.sw=3
ElseIf nebel.sw=3 Then
nebel.who="Player"
End If
While Buttonpressed(200)=200
Sleep 1,1
Getmouse mousex,mousey,,buttons
Wend |
Allerdings hängt sich das Programm sofort nach dem Klick auf den Button auf, da die While-Schleife ja nie endet.  |
|
Nach oben |
|
 |
MilkFreeze

Anmeldungsdatum: 22.04.2011 Beiträge: 116
|
Verfasst am: 25.04.2011, 11:13 Titel: |
|
|
Ich glaub du hast mich gerade missverstanden.
Du musst ja irgendwo buttonpressed() werte zuweisen, je nach dem welcher button gedrückt wurde. Diesen code musst du auch in die Whileschleife schreiben, damit die Schleife verlassen wird, sobald der Button nicht mehr gedrückt ist. ich hab nur GETMOUSE als Beispiel genommen, weil das sehr anschaulich ist.
Oder ist Buttonpressed() eine Funktion? Dann geht das auch so:
Code: |
'...
While (Buttonpressed(200)=200 or Buttonpressed(201)=201 )
Sleep 1,1
Wend |
Oder sollte es zumindest. Ich kenn ja nicht deinen kompletten Quelltext. _________________ Milch ftw  |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 25.04.2011, 11:14 Titel: |
|
|
Wird denn, wenn Buttonpressed(201)<>201, dieses nebel.sw auch wieder auf <>2 gesetzt? Auf mich wirkt das so, als ob die Taste gedrückt wird, nebel.sw den Wert 2 bekommt und dieser Wert dann auf Dauer so bleibt (bis dann mal Buttonpressed(200)=200 eintritt).
edit: ah, tschuldigung, falsch gelesen.
Ja, du musst eine Schleife reinbauen, die nichts weiter macht als auf das Loslassen des Buttons zu warten. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Zuletzt bearbeitet von nemored am 25.04.2011, 11:19, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 25.04.2011, 11:19 Titel: |
|
|
@nemored
nebel.sw wird ja direkt auf 3 gesetzt, schau:
Code: | If nebel.sw=2 Then
player1.money-=200
nebel.sw=3 |
@MilkFreeze
ButtonPressed ist die Funktion, mit der geprüft wird, ob der jeweilige Button gedrückt wurde(in dem Fall Button 200). |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 25.04.2011, 11:22 Titel: |
|
|
Ja, habe es vorhin überlesen
Das von MilkFreeze vorgeschlagene
Code: | While (Buttonpressed(200)=200 or Buttonpressed(201)=201 )
Sleep 1, 1
Wend |
sollte an sich funktionieren (wobei hier ein SLEEP 1 denselben Effekt hat). Einzubauen nach der Button-Abfrage und Wertänderung.
mal zusammen:
Code: | If Buttonpressed(201)=201 Then nebel.sw=4
If Buttonpressed(200)=200 Then nebel.sw=2
If nebel.sw=2 Then
player1.money-=200
nebel.sw=3
While Buttonpressed(200)=200
Sleep 1
Wend
ElseIf nebel.sw=3 Then
nebel.who="Player"
End If |
edit: jetzt habe ich doch noch eine Frage ... gibt Buttonpressed(200) zurück, ob die Taste gedrückt wurde oder gerade gedrückt wird? Im ersten Fall muss man das doch noch anders machen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 25.04.2011, 11:36 Titel: |
|
|
Buttonpressed() gibt zurück, ob der jeweilige Button gedrückt wird.
Allerdings kann das so nicht mit der While-Schleife funktionieren, da die Hauptschleife dadurch unterbrochen wird und Buttonpressed immer auf 200 steht.  |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 25.04.2011, 11:40 Titel: |
|
|
Anderer Vorschlag; die Änderung steht in der zweiten Zeile:
Code: | If Buttonpressed(201)=201 Then nebel.sw=4
If Buttonpressed(200)=200 And nebel.sw <> 3 Then nebel.sw=2
If nebel.sw=2 Then
player1.money-=200
nebel.sw=3
ElseIf nebel.sw=3 Then
nebel.who="Player"
End If |
Allerdings musst du dann nebel.sw irgendwann wieder den Status =3 wegnehmen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 25.04.2011, 11:44 Titel: |
|
|
Oh das klappt danke
Aber wieso soll ich ihm den Status 3 wieder abnehmen? |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 25.04.2011, 12:10 Titel: |
|
|
Weil du ansonsten nie wieder einen Effekt bei diesem Tastendruck hast. Außer das ist so geplant. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 25.04.2011, 12:15 Titel: |
|
|
Ja, das war auch so geplant.  |
|
Nach oben |
|
 |
|