Tastaturabfrage und Flushkeys
Übersicht

DebbieDangerBetreff: Tastaturabfrage und Flushkeys |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
Ebola33 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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... ![]() verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/ |
![]() |
DivineDominion |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
DebbieDangerBetreff: Danke erstmal |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group