Dauerfeuer weg, ein schuss pro tastendruck

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Gast

Betreff: Dauerfeuer weg, ein schuss pro tastendruck

BeitragDo, März 25, 2004 0:00
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

BeitragDo, März 25, 2004 0:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDo, März 25, 2004 0:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, März 25, 2004 19:47
Antworten mit Zitat
super danke jetzt funzts =D

General Alex

BeitragDo, März 25, 2004 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group