# KeyPressed Taste nur einmal drücken



## Cynric (1. Sep 2012)

Hallo zusammen,

ich habe folgendes Problem:

Ich programmiere gerade einen kleinen 2D-Shooter.
Es gibt verschiedene Waffen, unter anderem eine Pistole. Jetzt habe ich das Problem, dass ich, wenn ich KeyPressed aufrufe, das Programm natürlich die shoot-Methode auch dann ausführt, wenn ich die Taste halte.
Ich hätte es aber gern, dass man bei der Pistole immer einzeln drücken muss, damit der Spieler schießt.
Weiß einer, wie ich das Problem lösen kann?


----------



## Titanpharao (1. Sep 2012)

Ja total einfach.

Mache dir irgendwohin eine booleanvariable "pistelShoot".

Setzte diese auf True, wenn du 1x die shoot Methode gedrückt hast.

Mache shoot-Methode so lange nicht mehr, wie pistelShoot==true.

Setzte die pistelShoot Variable wieder auf False bei KeyReleased für den schieß knopf.

Würde dies aber noch mit einer Art Timer verknüpfen, damit du eine "minimal" Nachladezeit hast.

SOnst bau ich dirn Robot der dieses Spiel sau schnell macht


----------



## tribalup (1. Sep 2012)

Machs doch auf die keyreleased().


----------



## Cynric (1. Sep 2012)

Titanpharao hat gesagt.:


> Ja total einfach.
> 
> Mache dir irgendwohin eine booleanvariable "pistelShoot".
> 
> ...



Das mit der Boolean-Variable hab ich eig. schon.
Ich hab bei "KeyPressed" shoot = true und bei "KeyReleased" shoot = false.
Wie genau mach ich das jetz?
Muss ich das mit ner while-Schleife abfangen?

Und wenn ich das mit dem Timer mach, dann hängt sich das ganze Ding auf, solange ich die Shoot-Taste gedrückt halte


----------



## Titanpharao (1. Sep 2012)

So sieht in etwas der Code dafür aus (nicht lauffähig).


```
boolean pistelShoot=false;

keyPressed(){
	if(PISTOLENKEY&&!pistelShoot){
		pistelShoot=true;
		pistoleWirdAbgeschossenMachtEffektSchadenWieAuchImmerMethode();
	}
}

keyReleased(){
	if(PISTOLENKEY){
		pistelShoot=false;
	}
}
```


----------



## Cynric (2. Sep 2012)

Ah, so leicht wärs gewesen xD

Hat aber auf jeden Fall super geklappt, danke!!!


----------



## Titanpharao (2. Sep 2012)

Kein Problem^^ für das Timer Problem solltest du dir nun noch selbst was einfallen lassen.

Kurzum halt etwas, was eine maximal Schussfrequenz festlegt.

Sozusagen, nach ersten Schuss, warte ~100ms bis du wieder schießen kannst mit dieser Waffe. ö.ä.

Vergleichs mal mit der Dualy aus CS  die geht nicht unendlich schnell^^


----------

