Dauerfeuer weg, ein schuss pro tastendruck
Übersicht

GastBetreff: Dauerfeuer weg, ein schuss pro tastendruck |
![]() Antworten mit Zitat |
|
---|---|---|
Hi leutz =D
wie ihr euch schon halbwegs denken könnt bin ich neu in der BB com. ^^ Ich bin jetzt seit knapp ner woche an BB und bin grad dabei mir nen space shooter zusammenzubasteln ^^ Jetzt bin ich auf mein erstes proplem gestossen ^^" Also ich bin an den Schüssen, jetzt soll wenn ich die leertaste drücke ein schuss abgefeuert werden. Allerdings wird dann ne ganze reihe schüsse abgefeuert und wenn ich die leertaste gedrückt halte gehts immer weiter, ich will abaer nur pro tastendruck ein schuss. habs schon mit keyhit probiert aba da verschwindet der schuss sofort nach tastendruck wieder. Hier der code : Code: [AUSKLAPPEN] Graphics 800, 600, 16, 1
SetBuffer BackBuffer() spieler = LoadImage("spieler.bmp") bg = LoadImage("stars.bmp") schuss = LoadImage("schuss.bmp") X = 305 Y = 420 Dim las(20,2) ;Hauptschleife Repeat Cls H = H+1 If H=200 Then H=0 TileBlock bg,0,H DrawImage spieler, X, Y ;Steuerung If KeyDown(200) = 1 Then Y = Y - 2 If KeyDown(208) = 1 Then Y = Y + 2 If KeyDown(205) = 1 Then X = X + 2 If KeyDown(203) = 1 Then X = X - 2 Delay 10 ;schuss If KeyDown(57) = 1 Then DrawImage schuss, X+10, Y-19 If KeyDown(57) Then laser = laser + 1 If laser = 21 Then laser = 1 las(laser,0) = 1 las(laser,1) = X+10 las(laser,2) = Y-10 EndIf For I = 1 To 20 If las(I,0) = 1 Then DrawImage schuss, las(I,1), las(I,2) las(I,2) = las(I,2) - 50 EndIf Next Flip Until KeyHit(1) End Ich denk ma das mir da wer helfen kann^^ THX schonmal im vorraus =D Gruß Meryn |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich versuche dir mal zu erklären, wie man das lösen könnte. Du setzt irgendwo vor der Hauptschleife einern Timer
Code: [AUSKLAPPEN] Timer1 = Millisecs() ; Für Dauerfeuer Jetzt änderst du die Bedingungen für das Schiessen per Tastendruck ab Code: [AUSKLAPPEN] If KeyDown(57) and Millisecs() - Timer1 > 1000 then Timer1 = Millisecs() .... Hier kann jetzt geschossen werden ... EndIf Jetzt kann nur alle 1000ms geschossen werden. Wird ein Schuss abgefeuert, wird der Timer auf den aktuellen MilliSecs() Wert gesetzt und die Bedingung, die für den Schuss erforderlich ist, wird 1000ms lang nicht erfüllt. Nach Ablauf der Zeit, ist die Differenz zwischen dem Timer und dem aktuellen Wert von MilliSecs() größer als 1000ms. Die Bedingung wird erfüllt und ein Schuss wird abgefeuert. Gleichzeitig wird der Timer auf die aktuelle Zeit eingestellt. So kann man beliebig die Dauerfeuergeschwindigkeit einstellen. Funktioniert übrigens auch gut für Scrolling bei Menüs ect. Das dein Schuss gleich wieder verschwindet, wenn du die Taste los lässt, liegt daran, dass du den Tastendruck als Bedingung für das Anzeigen des Schusses gesetzt hast. Das solltest du ändern. Der Schuss muss immer angezeigt werden. |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
- Zuletzt bearbeitet von Travis am Do, März 25, 2004 0:25, insgesamt einmal bearbeitet
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] ;schuss
;If KeyDown(57) = 1 Then DrawImage schuss, X+10, Y-19 If Keyhit(57) Then laser = laser + 1 If laser = 21 Then laser = 1 so sollte es klappen.... die erste Abfrage brauchst du nicht, zeichnet ja immer an der gleichen Stelle, wenn es zu schnell geht dann benutze einen waittimer anstatt delay |
||
[BB2D | BB3D | BB+]
|
Gast |
![]() Antworten mit Zitat |
|
---|---|---|
super danke jetzt funzts =D | ||
![]() |
General Alex |
![]() Antworten mit Zitat ![]() |
---|---|---|
OK, es funktioniert jetzt, aber noch etwas: Delay solltest du wirklich nur benutzen, wenn du dein Programm wirklich für eine bestimmte Zeit anhalten willst. Wenn du aber nur die Framerate begrenzen willst, solltest du MilliSecs() benutzen, das ist nämlich besser, weil es nur das verzögert, was man auch verzögern will und nicht gleich das ganze Programm. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group