KeyDown feinjustiert

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

r.henson

Betreff: KeyDown feinjustiert

BeitragDo, Jan 29, 2004 0:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDo, Jan 29, 2004 1:20
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Jan 29, 2004 1:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Jan 29, 2004 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank Euch beiden. Habt mir sehr geholfen.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, Jan 30, 2004 1:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile
[BB2D | BB3D | BB+]

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group