| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen   | 
	
	
	
		| Autor | 
		Nachricht | 
	
	
		Westbeam
 
  
  Anmeldungsdatum: 22.12.2009 Beiträge: 760
 
  | 
		
			
				 Verfasst am: 25.04.2011, 09: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, 09: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, 10:14, insgesamt einmal bearbeitet | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		Westbeam
 
  
  Anmeldungsdatum: 22.12.2009 Beiträge: 760
 
  | 
		
			
				 Verfasst am: 25.04.2011, 09: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, 09: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, 10: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, 10: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: 4713 Wohnort: ~/
  | 
		
			
				 Verfasst am: 25.04.2011, 10: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, 10:19, insgesamt einmal bearbeitet | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		Westbeam
 
  
  Anmeldungsdatum: 22.12.2009 Beiträge: 760
 
  | 
		
			
				 Verfasst am: 25.04.2011, 10: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: 4713 Wohnort: ~/
  | 
		
			
				 Verfasst am: 25.04.2011, 10: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, 10: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: 4713 Wohnort: ~/
  | 
		
			
				 Verfasst am: 25.04.2011, 10: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, 10: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: 4713 Wohnort: ~/
  | 
		
			
				 Verfasst am: 25.04.2011, 11: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, 11:15    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Ja, das war auch so geplant.    | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		 |