Tastaturverriegelung

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

burri

Betreff: Tastaturverriegelung

BeitragDo, Jun 18, 2009 18:54
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BladeRunner

Moderator

BeitragDo, Jun 18, 2009 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Jun 18, 2009 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Jun 18, 2009 19:37
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner hat Folgendes geschrieben:
Bitte nutze die Codetags, macht das leichter zu lesen.


Exclamation

ozzi789

BeitragDo, Jun 18, 2009 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile

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 Wink



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

BeitragDo, Jun 18, 2009 21:14
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Jun 18, 2009 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
 

DjDETE

BeitragDo, Jun 18, 2009 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Crying or Very sad
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

BeitragFr, Jun 19, 2009 2:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jun 19, 2009 4:30
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
SetBuffer BackBuffer()
x = 200
y = 200

Repeat
hoch = KeyDown(200)
runter = KeyDown(208)
links = KeyDown(203)
rechts = KeyDown(205)

If Not (hoch Or runter)
If links
;Auto nach links
x = x - 1
ElseIf rechts
;Auto nach rechts
x = x + 1
EndIf
Else
If hoch
;Auto nach oben
y = y - 1
ElseIf runter
;Auto nach unten
y = y + 1
EndIf
EndIf

Cls
Rect x-5, y-5, 10, 10, 1
Flip 1
Forever


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

BeitragFr, Jun 19, 2009 10:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jun 19, 2009 10:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group