KeyDown feinjustiert
Übersicht

r.hensonBetreff: KeyDown feinjustiert |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich möchte ein Objekt horizontal in einer festgelegten einheitlichen Schrittlänge z.B. 10 Pixel per Tastatur bewegen. (...If Taste = 50 Then X = X + 1o.....). Eigentlich kein Problem. Allerdings möchte ich auf der einen Seite die Möglichkeit haben genau nur einen Schritt per Tastendruck zu machen, zum Anderen möchte ich aber bei längeren Tastendruck das Objekt mehrere Schrittlängen verschieben. Mein Problem: GetKey() ist zwar sehr genau. Aber ich muß immer für eine Schrittlänge je eine Taste drücken. KeyDown () ermöglicht sozusagen "Autofire" einer Taste, also die Länge eines Tastendrucks abzufragen, doch wird Blitzbasic so schnell ausgeführt das selbst bei kurzen Tastendruck schon mehrere Programmdurchläufe, und somit Verschiebungen des Objekts ausgeführt wurden. Was mache ich nun, wenn ich das Programm nicht künstlich langsam machen möchte ????? Vielen Dank im Voraus. |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab da mal was zusammen gebastelt ist aber noch nicht optimiert, aber gehen tuts schonCode: [AUSKLAPPEN] Graphics 800,600,16,2
SetBuffer BackBuffer() Const ESC = 1 Const Hoch= 200,Runter=208,Links = 203,Rechts=205 Const Links_Zeit_Delay = 100 ; 100 millisekunden für 10er Schritte Const Rechts_Zeit_Delay=100 Const Wartezeit_Delay = 500 x =400 While Not KeyDown(ESC) If KeyHit (Links) = 1 Then x = x - 1 ; is klar If Not KeyDown(Links) Then Links_Taste_Start = MilliSecs() Schrittweite = 0 End If If MilliSecs() - Links_Taste_Start > Wartezeit_Delay Then Schrittweite = 10 If MilliSecs() - Links_Speedtime > Links_Zeit_Delay Then x= x -Schrittweite Links_Speedtime = MilliSecs() End If If KeyHit (Rechts) = 1 Then x = x + 1 ; is klar If Not KeyDown(Rechts) Then Rechts_Taste_Start = MilliSecs() Rechts_Schrittweite = 0 End If If MilliSecs() - Rechts_Taste_Start > Wartezeit_Delay Then Rechts_Schrittweite = 10 If MilliSecs() - Rechts_Speedtime > Rechts_Zeit_Delay Then x= x +Rechts_Schrittweite Rechts_Speedtime = MilliSecs() End If Rect x,300,30,30,1 Text 400,100,x Flip Cls Wend End Kopieren >>>> Probieren |
||
[BB2D | BB3D | BB+]
|
![]() |
Mike Nike |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es ist eigentlich nur selbsterklärender Pseudocode und nicht ganz exakt bezüglich der Zeitmessung...
Wenn KeyMovement gedrückt wird, dann geht das Objekt einen Schritt. const KeyDownObjectMovementStartTime#=0.5 ist die Zeit nachdem er den zweiten Schritt macht, falls man bis dahin die Taste geedrückt hatte... const KeyDownObjectMovementStepTime#=0.25 Nach den 0,5 "Sekunden" macht er dann erst nach 0,25 Sekunden den nächsten Step/Schritt usw. Code: [AUSKLAPPEN] const KeyDownObjectMovementStartTime#=0.5 const KeyDownObjectMovementStepTime#=0.25 global KeyDownObjectMovementTime#=0 global fps=40 timer=createtimer(fps) global Zeitkonstante#=1/float(fps) repeat waittimer(timer) if keydown(KeyMovement) then KeyDownObjectMovementTime#=KeyDownObjectMovementTime#+Zeitkonstante# ;hier musst du die Fälle catchen, evtl. durch einen Bereich, abgesteckt durch einen Schwellenwert oder so -> ;if KeyDownObjectMovementTime#=Schwellenwert(0.5) ; ;... ;end if ;if (KeyDownObjectMovementTime#-0.5)/0.25>=1 and Schwellenwert((KeyDownObjectMovementTime#-0.5)/0.25) then ;... ;end if else KeyDownObjectMovementTime#=0 end if until keyhit(1) Edit: Ach mist... Jetzt ists mirs schon wieder passiert... Ich schreibe ein Post, muss währenddessen weg...komm wieder...replye und in der Zwischenzeit hat ein anderer gepostet...tss |
||
..where the only limit is your imagination. |
r.henson |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank Euch beiden. Habt mir sehr geholfen. | ||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
damit es flüssiger aussieht
soltest du noch die schrittweite von 10 auf 1 runtersetzen und dafür die Links_Zeit_Delay und Rechts_Zeit_Delay auf 10 setzen Aber das hast du bestimmt schon geändert ![]() |
||
[BB2D | BB3D | BB+]
|
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group