Tastaturabfrage und Flushkeys

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

DebbieDanger

Betreff: Tastaturabfrage und Flushkeys

BeitragDo, März 03, 2005 0:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich bin noob und habe mir "spiele programieren mit blitz basic" gekauft.
Ich habe gerade so ein bissl mit der hintergrund2.bb rumgespielt und wollte es zu so einer art shooter machen.

mein problem ist: wenn man die schuss taste gedrückt hält gibt es dauerfeuer, und das will ich nicht.
ich habe keydown verwendet, weil keyhit ein anderes problem gemacht hat. Und nun dachte ich mir ich könnte mit flushkeys verhindern das man die taste durchdrücken kann. geht aber nicht.

bitte um ratschläge


hier mein code:

Code: [AUSKLAPPEN]
;shooter.bb
Graphics 640, 480
SetBuffer BackBuffer()
hinter = LoadImage("stars.bmp") ;bilder definieren
rakete = LoadImage("spaceship2.bmp")

SeedRnd MilliSecs()

box_x=10 ;ein x startwert für die box
box_y=20 ;ein y startwert für die box
meep=LoadSound("soundfx11.wav") ;das ist der sound wenn das schiff von dem bösen klotz getroffen wird
boom=LoadSound("soundfx20.wav") ;das ist der sound wenn das schiff den bösen klotz trifft (mit dem lieben klotz(unserem schuss))
leben = 10

Repeat
 bulletx=MouseX()+10 ;für den schuss
 bullety=MouseY()-40 ;für den schuss
 I = I+1
 If I=200 Then I=0 ;zeug für den hintergrund
 TileBlock hinter,0,I ;" " " "
 DrawImage rakete,MouseX(),MouseY() ;unser raumschiff

If ImageRectCollide (rakete,MouseX(),MouseY(),0,box_x,box_y,20,20) Then PlaySound(meep) :leben=leben-3 : box_x=1000

Text 100,100, leben ;zeigt die variable leben die bei beschuss und beim schiessen sinkt, und bei treffern steigt


If KeyHit(2) Then PlaySound(meep) : Rect MouseX()+10,MouseY()-40,20,20,0 : leben=leben-1
;wenn die taste 1 gedrückt ist spiele meep, mach ein holes rechteck über dem schiff und ziehe 1 leben ab

If box_y>640 Then box_y=-20 : box_x=Rand(1,640)
;wenn box den bildschirm verlässt wird neue box an zufälligem X erstellt

If RectsOverlap (bulletx,bullety,20, 20, box_x, box_y, 20,20) And KeyDown(2)  Then FlushKeys: PlaySound(boom) : box_x=1000 : leben=leben+2
;wenn die beiden rechtecke kollidieren und "1" gedrückt wird dann flushkeys, spiele boom, verschiebe die box aus dem sichtbereich, addiere 2 leben dazu

Rect box_x,box_y,20,20,1
box_y=box_y + 30 ;lässt die box nach unten fahren auf der Y achse

Flip
Until KeyHit(1)


skey-z

BeitragDo, März 03, 2005 1:20
Antworten mit Zitat
Benutzer-Profile anzeigen
ich bin auch noch noob, aber ich hätte da vlt einen tip, auch wenn er nicht komfortabel seien sollte

Code: [AUSKLAPPEN]

;timer erstellen
takt=createtimer(60)
;erst nachdem takt bei 60 angekommen ist, fängt der nächste
Schleifendurchlauf an

Repeat
 waittimer(takt)
 t=t+1
 cls
 if t=>90 then schuss=true
 ;erst wenn t den Wert 90(1,5 sek) erreicht hat, kann wieder ein schuss stattfinden
 if keydown(28) and schuss=true then ;mit Enter(28)
  ;hier dann der Schussbefehl und Variabeln setzen
   t=0 : schuss=False
 endif
 [...]
  Flip
Until keyhit(1) ;mit Escape das Spiel beenden

end

[...]
evtl. funktionen und unterprogramme


somit ist zwar dauerfeuer möglich, aber durch den timer und t wird die
Schussfolge geringer gehalten.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

Ebola33

BeitragDo, März 03, 2005 1:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Flushkeys löscht lediglich den Tastaturpuffer. Das heisst wenn mit keydown geprüft wird wäre er beim nächsten Schleifendurchlauf wieder voll. Wenn du Keyhit nicht verwenden möchtest oder es Probleme macht giebt es trotzdem eine einfache Lösung :

Code: [AUSKLAPPEN]

global feuer=false

while not(keydown(1)) ; hauptschleife

if feuer=false then
   if keydown(schuss_taste) then
      feuer=true ; schusscode sperren
      create_schuss
   endif
endif
if not(keydown(schuss_taste) then feuer=false ; schusscode freigeben

wend ; hauptschleife

Du nimmst dir einfach eine Variable (feuer) die du auf true setzt wenn geschossen wurde. Da man nur schiessen kann wenn feuer false ist wird der nächste Schuss jetzt einfach ignoriert.
Wird die Taste wieder losgelassen (not) dann wird feuer wieder auf false gesetzt. Das heisst man kann wieder schiessen.
fertig Wink

edit :
Mir ist da noch was aufgefallen statt :
Code: [AUSKLAPPEN]
 I = I+1
 If I=200 Then I=0 ;zeug für den hintergrund

solltest du besser schreiben:
Code: [AUSKLAPPEN]
i=(i+1)mod 200


Mfg Ebola
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/

DivineDominion

BeitragDo, März 03, 2005 14:34
Antworten mit Zitat
Benutzer-Profile anzeigen
https://www.blitzforum.de/viewtopic.php?t=8345

Wenn die Tastaturabfrage da ne Rolle spielen sollte... Kannst damit ein "HIT" erzeugen.
christian.tietze@gmail.com - https://christiantietze.de
macOS
 

DebbieDanger

Betreff: Danke erstmal

BeitragDo, März 03, 2005 22:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke erstmal für die mühe.
leider bin ich noch nicht ganz damit klar gekommen.

Ich habe ebolas version ausprobiert leider hat es das problem nicht behoben, ich kann immernoch die 1 gedrückt halten und die köstchen werden "zerstört"

Dann habe ich skey-z ausprobiert und einen moment hat es das rappidfire eingeschränkt und ich musste zum schiessen immer etwas warten, leider kann man aber immernoch die taste einfach gedrückt halten.

Naja ich versuchs mich dann mal wieder daran.

THX

Debbie

BladeRunner

Moderator

BeitragDo, März 03, 2005 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Keyhit wäre Mittel der Wahl. Warum konntest Du das nicht verwenden ?
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

DebbieDanger

BeitragFr, März 04, 2005 10:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei keyhit hat sich die feindliche box nicht verschoben.
Ich denke das liegt an der bedingung. Nur wenn der keyhit 1 kommt der sound und so aber er verschiebt dann nciht die box.

Weiß auch nicht. Würde vielleicht helfen wenn das mal jemand das programm mal ausprobieren würde die grafiken und sounds sind auf der jetzt lerne ich blitz basic cd.

ok danke.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group