Tastaturverriegelung
Übersicht

burriBetreff: Tastaturverriegelung |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
wenn ich bei gerückter Pfeiltaste oben oder unten , die rechte- oder linke Pfeiltaste drücke, wird das Auto beeinflusst. Hat jemand eine Idee wie die Sperre am besten zu lösen wäre. Ich habe es selbst schon eine Weile versucht und habe Probleme damit. Am besten den Code mal ausprobieren: viele Grüße von burri Edit: Codetags eingefügt. BladeRunner Code: [AUSKLAPPEN] Graphics 800,600,32,1
SetBuffer BackBuffer() x=400 y=300 Dim Auto(359) TFormFilter 0 For winkel = 0 To 359 Auto(winkel)=LoadImage("player1.bmp") RotateImage Auto(winkel),winkel MaskImage Auto(winkel),0,0,255 MidHandle Auto(winkel) Next While Not KeyHit(1) ;Beginn der Hauptschleife Cls If KeyDown(203) Or (x Mod 50<>0 And winkel=270) winkel=270 x=x-10 ElseIf KeyDown(205) Or (x Mod 50<>0 And winkel=90) winkel=90 x=x+10 ElseIf KeyDown(200) Or (y Mod 50<>0 And winkel=0) winkel= 0 y=y-10 ElseIf KeyDown(208) Or (y Mod 50<>0 And winkel=180) winkel= 180 y=y+10 EndIf For wert=25 To 825 Step 50;Gitter zeichnen Line wert,0,wert,800 Line 0,wert,800,wert Next If winkel > 359 Then winkel = 0 If x<0 Then x=800 If x > 800 Then x = 0 If y<0 Then y=600 If y > 600 Then y = 0 DrawImage auto(winkel),x,y Flip Wend End |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bitte nutze die Codetags, macht das leichter zu lesen. | ||
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 |
burri |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo BladeRunner
ich möchte eine Tastenverriegelung realisieren. Nochmal den kommentierten Text: Graphics 800,600,32,1 SetBuffer BackBuffer() x=400 ;Stellung Auto y=300 Dim Auto(359) TFormFilter 0 For winkel = 0 To 359 Auto(winkel)=LoadImage("player1.bmp") RotateImage Auto(winkel),winkel ;Array Rotation des Autos MaskImage Auto(winkel),0,0,255 MidHandle Auto(winkel) Next While Not KeyHit(1) ;Beginn der Hauptschleife Cls If KeyDown(203) Or (x Mod 50<>0 And winkel=270) ;Auto um 50 Pixel nach links winkel=270 ;rotiere Auto links x=x-10 ElseIf KeyDown(205) Or (x Mod 50<>0 And winkel=90) ;Auto um 50 Pixel nach rechts winkel=90 ;rotiere Auto rechts x=x+10 ElseIf KeyDown(200) Or (y Mod 50<>0 And winkel=0) ;Auto um 50 Pixel nach oben winkel= 0 ;rotiere Auto oben y=y-10 ElseIf KeyDown(208) Or (y Mod 50<>0 And winkel=180) ;Auto um 50 Pixel nach unten winkel= 180 ;rotiere Auto unten y=y+10 EndIf For wert=25 To 825 Step 50 ;Gitter zeichnen 50*50 Line wert,0,wert,800 Line 0,wert,800,wert Next If winkel > 359 Then winkel = 0 ;Index begrenzen If x<0 Then x=800 ;Auto zum rechten Bildrand If x > 800 Then x = 0 ;Auto zum linken Bildrand If y<0 Then y=600 ;Auto zum unteren Bildrand If y > 600 Then y = 0 ;Auto zum oberen Bildrand DrawImage auto(winkel),x,y ;zeichne Auto Flip Wend End |
||
![]() |
the FR3AK |
![]() Antworten mit Zitat ![]() |
---|---|---|
BladeRunner hat Folgendes geschrieben: Bitte nutze die Codetags, macht das leichter zu lesen.
![]() |
||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi
Erstmal mit Codetags hat Bladerunner [*code] und [*/code] gemeint, dies bewirkt das der Quellcode in einer Box erscheint (übersichtlicher) (beachte die * sind nur da sodass der Befehl nicht eingreift) Du kannst das manuel eingeben oder einfach oben bei den Smilys auf Code drücken während du den zu einboxenden Text/Code markiert hast ![]() Du willst also eine Idee wie du verhinderst das die Pfeiltasten nicht reagieren? Wie wärs mit ner Variabeln? Nur so nebenbei, wenn dein auto sich nur in 90 grad bewegungen dreht, brauchst du auch nicht 360 einzelne Bilder, denk an den armen Arbeitsspeicher ![]() Code: [AUSKLAPPEN] Graphics 800,600,32,1
SetBuffer BackBuffer() x=400 y=300 Dim Auto(359) TFormFilter 0 For winkel = 0 To 359 Auto(winkel)=LoadImage("C:\a.png") RotateImage Auto(winkel),winkel MaskImage Auto(winkel),0,0,255 MidHandle Auto(winkel) Next While Not KeyHit(1) ;Beginn der Hauptschleife Cls If KeyHit(57) ;Wenn leertaste gedrückt wird tasten_erlaubt=tasten_erlaubt+1 ;die variable um eins erhöhen If tasten_erlaubt>1 Then tasten_erlaubt=0 ;falls sie grösser als 1 ist auf 0 setzen, so wird bei jedem leertasten hit die variable von 0 auf 1 und umgekehrt gesetzt EndIf If tasten_erlaubt=1 ;falls die Tasten erlaubt sind (also die Variable auf 1) If KeyDown(203) Or (x Mod 50<>0 And winkel=270) winkel=270 x=x-10 ElseIf KeyDown(205) Or (x Mod 50<>0 And winkel=90) winkel=90 x=x+10 ElseIf KeyDown(200) Or (y Mod 50<>0 And winkel=0) winkel= 0 y=y-10 ElseIf KeyDown(208) Or (y Mod 50<>0 And winkel=180) winkel= 180 y=y+10 EndIf EndIf ;soll dieser code wirken sonst nicht For wert=25 To 825 Step 50;Gitter zeichnen Line wert,0,wert,800 Line 0,wert,800,wert Next If winkel > 359 Then winkel = 0 If x<0 Then x=800 If x > 800 Then x = 0 If y<0 Then y=600 If y > 600 Then y = 0 DrawImage auto(winkel),x,y Color 255,0,0 ;Nur grafisches Zeug um es zu verdeutlichen Rect 0,0,700,40 Color 255,255,255 Text 0,0,"Tasten erlaubt:"+tasten_erlaubt+" 0=Nein / 1= Ja" Text 0,20,"Drücke Leertaste um dies zu ändern" Flip Wend End mfg ozzi |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
burri |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hallo ozzi
danke für den Hinweis mit den Code-Tags. Mit Variablen habe ich es schon probiert, leider ist es nicht so einfach wie gedacht, zumindest nicht mit dieser Schleifenstruktur. Ich habe schon ein paar Stunden an Zeit investiert. Kannst du das Programm mal laufen lassen? Bis auf die Ressourcen fressende Rotation, ist es eine sehr kurze aber effiziente Programmierung, es ist keinerlei Ruckeln des Autos zu verzeichnen. Jetzt hapert es nur noch an der Tastenverriegelung. In horizontaler Richtung sind die Tasten gegenüber den vertikalen Pfeiltasten verriegelt, aber nicht in vertikaler Richtung gegenüber den horizontalen Pfeiltasten. Kannst du mir eine Lösung coden? Danke nochmal und viele Grüße, burri |
||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
burri hat Folgendes geschrieben: In horizontaler Richtung sind die Tasten gegenüber den vertikalen Pfeiltasten verriegelt, aber nicht in vertikaler Richtung gegenüber den horizontalen Pfeiltasten. Bezieht sich das jetzt auf meinen Code oder soll das der Wunschcode sein? Im allgemeinen wird hier das bitte poste mal den fertigen Code nicht gerne gesehn, aber man kann bei neulingen mal ein Auge zudrücken, ich mag zu helfen :> Trotzdem würde ich dir mal ein Tutorial ala Robsite ans Herze legen (einfach mal die Forensuche anschmeissen) Zur lösung gib ich dir nen pseudocode (ich hoffe ich habe dich richtig verstanden) If tasten=1 or tasten=3 If keyhit(links)... If keyhit(rechts)... endif If tasten=2 or tasten=3 If keyhit(oben)... If keyhit(unten)... endif Wenn du nun die Steuerung ganz abschalten willst setzt du tasten=0, wenn links/rechts auf 1 und weiter so bei 2... falls tasten=3 ist geht die Steuerung auf alle Seiten. hoffe ich konnte helfen, mfg ozzi ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
DjDETE |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das liegt nicht daran. Ich wüsste nicht wie es zu verhindern ist, bei NFS Underground 2 konnte ich früher auch nie nach links lenken während ich Nitro gab ![]() Vlt. mit GetKey ![]() MfG |
||
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden. |
burri |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Ozzi,
ich glaube dein Code hilft mir nicht weiter. Ich möchte während ich die hoch- oder runter-Pfeiltaste drücke und dabei die rechts- oder links- Pfeiltaste drücke, das Auto sich von der rechts- oder links-Pfeiltaste nicht beeinflussen lässt. Ansonsten soll die Steuerung in allen Richtungen funktionieren. Mit deinem Code ist entweder die vertikale(taste2) oder die horizontale(taste1) Fahrtrichtung blockiert, oder es gehen alle Fahrtrichtungen(taste3) und das Problem ist immer noch da. Vielleicht fällt dir noch was ein? Vielen Dank für deinen Support, burri |
||
![]() |
Nova |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzBasic: [AUSKLAPPEN] SetBuffer BackBuffer() So dürfte das funktionieren. Der Kasten kann jetzt in alle Richtungen fahren, allerdings nicht nach links oder rechts wenn er bereits nach oben oder unten fährt. |
||
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit |
burri |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Nova, hallo DjDETE,
vielen Dank für eure Hinweise. Ich habe mittlerweile eine Lösung gefunden. Die Tasten sind zwar nicht verriegelt, aber das Auto kommt nicht mehr zwischen den Kacheln zum stehen. Ich hoffe das mit den Code-Tags funktioniert. Grüße von burri Für jemand der Interesse an einer tile-based Steuerung hat: [*code] Graphics 800,600,32,1 SetBuffer BackBuffer() x=400 ; Auto Anfangsposition y=300 Auto=LoadImage("player1.bmp") ;Auto laden MaskImage Auto,0,0,255 MidHandle Auto Autoauf=CopyImage(Auto) ;Auto drehen Autorechts=CopyImage(Auto) RotateImage Autorechts ,90 Autoab=CopyImage(Auto) RotateImage Autoab ,180 Autolinks=CopyImage(Auto) RotateImage Autolinks ,270 While Not KeyHit(1) ;Beginn der Hauptschleife Cls If KeyDown(203) And y Mod 50=0 Or (x Mod 50<>0 And winkel=270) winkel=270 x=x-10 Auto=Autolinks ElseIf KeyDown(205) And y Mod 50=0 Or (x Mod 50<>0 And winkel=90) winkel=90 x=x+10 Auto=Autorechts ElseIf KeyDown(200) Or (y Mod 50<>0 And winkel=0) winkel= 0 y=y-10 Auto=Autoauf ElseIf KeyDown(208) Or (y Mod 50<>0 And winkel=180) winkel= 180 y=y+10 Auto=Autoab EndIf For wert=25 To 825 Step 50;Gitter zeichnen Line wert,0,wert,800 Line 0,wert,800,wert Next If winkel > 359 Then winkel = 0 If x<0 Then x=800 If x > 800 Then x = 0 If y<0 Then y=600 If y > 600 Then y = 0 DrawImage Auto,x,y Flip Wend End [*/code] |
||
burri |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ein Befehl habe ich noch entfernt!
Nochmal den Code diesmal mit richtigen Code-Tags Code: [AUSKLAPPEN] Graphics 800,600,32,1
SetBuffer BackBuffer() x=400 ; Auto Anfangsposition y=300 Auto=LoadImage("player1.bmp") ;Auto laden MaskImage Auto,0,0,255 MidHandle Auto Autoauf=CopyImage(Auto) ;Auto drehen Autorechts=CopyImage(Auto) RotateImage Autorechts ,90 Autoab=CopyImage(Auto) RotateImage Autoab ,180 Autolinks=CopyImage(Auto) RotateImage Autolinks ,270 While Not KeyHit(1) ;Beginn der Hauptschleife Cls If KeyDown(203) And y Mod 50=0 Or (x Mod 50<>0 And winkel=270) winkel=270 x=x-10 Auto=Autolinks ElseIf KeyDown(205) And y Mod 50=0 Or (x Mod 50<>0 And winkel=90) winkel=90 x=x+10 Auto=Autorechts ElseIf KeyDown(200) Or (y Mod 50<>0 And winkel=0) winkel= 0 y=y-10 Auto=Autoauf ElseIf KeyDown(208) Or (y Mod 50<>0 And winkel=180) winkel= 180 y=y+10 Auto=Autoab EndIf For wert=25 To 825 Step 50;Gitter zeichnen Line wert,0,wert,800 Line 0,wert,800,wert Next If x<0 Then x=800 If x > 800 Then x = 0 If y<0 Then y=600 If y > 600 Then y = 0 DrawImage Auto,x,y Flip Wend End |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group