 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 24.06.2008, 18:14 Titel: Tastenwiederhohlrate modifizieren |
|
|
Kann man die Tasten wiederhohlrate mit freebasic einstellen?
Wenn nicht nehme ich multikey aber das wäre in meiner verwendung viel rechenintensiver. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 24.06.2008, 19:14 Titel: |
|
|
das geht höchstens systemweit per winapi und ist deswegen nicht zu empfehlen. Multikey ist auch nicht rechenintensiver als Inkey. Genau genommen ist es theoretisch sogar weniger rechenintensiv. Wahrscheinlich hast du Multikey in einer DO...LOOP-Schleife stehen, die einfach so ohne unterbrechung durchrattert und deswegen 100% Systemlast erzeugt. Deswegen immer ein "SLEEP 1" einbauen! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 24.06.2008, 20:31 Titel: |
|
|
nein, ich steuere damit eine drehbewegung und je mehr fps sind desto kürzer ist die bewegung pro frame und diese berechnung ist rechenintensiver, deshalb habe ich auch geschrieben dass es in meiner verwendung rechenintensiver ist.
Ich habe es mit multikey gemacht. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 25.06.2008, 12:22 Titel: |
|
|
Hi,
wenn jeder Tastendruck nur einen Schritt bewirken soll, kann man auch auf das loslassen der Taste warten Code: | If MultiKey(fb.sc_e) Then
Do 'warte bis Taste losgelassen wird
Sleep 1
Loop While MultiKey(fb.sc_e)
drehung = drehung + speedslow
End If | aber damit würdest du dir deine Zählschleife für die fps sehr ungenau machen.
Eine andere Möglichkeit ist sich das drücken der Taste in einer Variablen (sogenantes Flag) zu merken. Das stört die Zählschleife der fps nicht.
Code: | #Include "fbgfx.bi"
Const Pi As Double = 3.141592653589793
Dim As Single fpc, speedslow, speed, drehung
Dim As Integer fpsb, curfps, w, h, ftaste
Dim As Integer xkreuz, ykreuz, xscreenmitte, yscreenmitte
Screen 18
ScreenInfo w, h
xscreenmitte = w\2
yscreenmitte = h\2
Do
fpsb = fpsb+1
speedslow = Pi / curfps
If MultiKey(fb.sc_e) Then
ftaste = 1
Else
If ftaste = 1 Then
drehung = drehung + speedslow
ftaste =0
End If
End If
If MultiKey(fb.sc_q) Then
ftaste = 2
Else
If ftaste = 2 Then
drehung = drehung - speedslow
ftaste =0
End If
End If
If drehung > (2*pi) Then drehung = drehung - (2*pi)
If drehung < -(2*pi) Then drehung= drehung + (2*pi)
xkreuz = (Cos(drehung))*50+xscreenmitte
ykreuz = (Sin(drehung))*50+yscreenmitte
ScreenLock
Cls
Locate 1
Print "x-Koordinate vom Kreuz:",ykreuz
Print "y-Koordinate vom Kreuz:",xkreuz
Print "Bilder pro Sekunde:",curfps
Line (xkreuz,ykreuz-4)-(xkreuz,ykreuz+4),15 'senkrechte Linie
Line (xkreuz+4,ykreuz)-(xkreuz-4,ykreuz),15 'waagerechte Linie
PSet (xscreenmitte,yscreenmitte)
ScreenUnlock
Sleep 1 'Prozessor-Last senken
ScreenSync 'nächsten Bildaufbau abwarten
If Timer >= fpc Then
fpc = Timer + 1
curfps = fpsb
fpsb = 0
End If
Loop Until InKey= Chr(27) ' mit ESCAPE-Taste abbrechen | Wie du siehst sind noch einige Änderungen zu deinem Programm darin. Mit Hilfe der Befehlsreferenz wirst du sicher erkennen was da anders läuft.  _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 25.06.2008, 13:09 Titel: |
|
|
Ich habe es jetzt doch stufenlos gemacht
Ich habe gesehen dass du in deinem Programm code die if schleifen verschachtelst hast, ist das weniger rechenintensiv? |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|