"Typematic Rate Setting" im Konsolenprogramm ändern?
-
Hi
Dies ist mein erster Post, bin brandneu hier und auch noch relativ frisch im Bereich Programmieren. Habe nun bald mein erstes Ausbildungsjahr als IT-SE hinter mir und da gehört auch Anwendungsentwicklung zum Ausbildungsplan ^^
Vorweg: Ich arbeite mit DevCPP, finde das Programm ziemlich genial.
Zur Zeit versuche ich ein "Pong" (bzw. eher eine Art Breakout) zu programmieren.
Meine Frage ist nun:
Wie kann ich die Typematic Rate Setting im Spiel selbst etwas rauf setzen?! Bzw. sie vielleicht ganz ignorieren und dem Spiel eine eigene "Tastaturgeschwindigkeit" zuordnen? Denn die Ballbewegung sollte schon angemessen sein (habe da mal einen delay von 20msec gewählt +g+) um da mit der Tastatur hinterher zu kommen ist´s mit der Bios/Windows Tastatur Setting nicht immer flott genug.Optimal wäre natürlich auch eine Maussteuerung, aber da würden mir wohl nur ganze Funktionsbeispiele weiterhelfen, da ich davon bisher noch keinerlei Ahnung habe, wie man die Maus in ein Konsolenprogramm einbindet.
Schonmal vielen Dank im Voraus
Cya, Mäxl
-
hm.. also ich geh gleich schlaffen, deswegen werd ich mich nicht mit den details beschäftigen, allgemein verstehe ichs aber so:
du willst also ein Objekt im spiel jedes mal, wenn eine taste gedruckt wird, verschieben, wenn eine taste unten bleibt - dann rechnest du damit, das das programm immer wieder diese message bekommt, dass die taste gedrückt wurde. Das frequenz stimmt aber nicht..
Hab ichs richtig verstanden?
wenn ja: dieses Prinzip wird dich nicht weit bringen.. Du solltest es so machen: du legst ein bool-Array an, für jede taste die du brauchst - ein element. Nach der "PeekMessage" funktion suchst du, ob du die message "WM_KEYDOWN" (ich glaub es hieß so... bin voll am einschlaffen..) oder "...UP" kriegst - wenn ja - dann stellst du im Array den element der entsprechenden taste auf true (für "Taste gedrückt") oder false ("taste frei").
Jetzt, im haupt-loop (der mit einer stabilen FPS ausgeführt werden soll) verschiebst du den Objekt nur dann, wenn die entsprechende taste gedrückt (also, ihr entsprechendes element im array true ist) ist.
mfg,
schlaffender Maverick
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
für die maus:
schon ins dos/win32 konsolenfaq geschaut?
http://www.c-plusplus.net/forum/viewtopic-var-t-is-86415.html
-
Genau das habe ich vor, du hast es richtig verstanden
Um Bool Arrays selbst zu erstellen bin ich allerdings noch nicht geübt genug, wenn du vielleicht wieder wach bist (
) würde ich mich tierisch freuen, wenn du mir da den Quelltext mal zurechtschreiben könntest.
Ja habe ich, allerdings auch wieder so´n Bool-Ding *g* Ich versuch das mal umzubauen dass das mit der Maus so passt wie ich das vorhabe... Keyboard wäre mir trotzdem lieber, bzw. wüsste ich das gern zusätzlich, dann kann ich ja ne Abfrage im Programm einbauen, wie gesteuert werden soll.
Aber schonmal danke soweit
Cya, Mäxl
-
DJMadMax schrieb:
Ja habe ich, allerdings auch wieder so´n Bool-Ding *g* Ich versuch das mal umzubauen dass das mit der Maus so passt wie ich das vorhabe... Keyboard wäre mir trotzdem lieber, bzw. wüsste ich das gern zusätzlich, dann kann ich ja ne Abfrage im Programm einbauen, wie gesteuert werden soll.
keyboardabfrage steht auch im dos/win32 - faq.
tastaturcodes der 'sonderzeichen' (pfeiltasten, etc..) sind dort zu finden, bzw. über die suchfunktion oben rechts findest du dazu massen, wird wöchentlich gefragt.
-
Die Tastaturcodes sind doch kein Problem
Ich habe ja ein funktionierendes Programm, in dem ich per Pfeiltasten (glaube wert 77 und 75 sind das, jetzt mal so ausm Kopf +g+) ein Objekt(Zeichenkette) bewegen kann.
Das Problem ist doch nur, dass sich die Zeichenkette ja entweder nur per Tastendruck um jeweils eine Stelle bewegt, oder aber, wenn man die Taste gedrückt lässt, die Bewegung abhängig von der Typematic Rate Setting (Tastaturwiederholrate) von Windows bzw. dem Bios abhängt.. das heisst: Lässt du die Pfeiltaste gedrückt, bewegt sich die Zeichenkette erst um eins, bleibt dann ca. ne viertel, bis halbe Sekunde hängen (eben je nach dem was man im Bios/Windows eingestellt hat) und rennt dann mit mehreren Bewegungen pro Sekunde weiter.
Das will ich eben im Programm umgehen, ich will die Wiederholrate selbst definieren, dass bei Tastendruck ohne Verzögerung die Zeichenkette (z.b.) gleich mit 10msec pro Stellensprung loslegt.
Cya, Mäxl
-
SystemParametersInfo mit SPI_SETKEYBOARDSPEED
-
Der Befehl klingt interessant... nur wie bau ich den ein?! Ich hab doch extra geschrieben, dass ich C(++) Anfänger bin, hab keine Ahnung von den ganzen Befehlen und Funktionen, würde mich daher freuen, wenn ihr mir diese Lösungsvorschläge immer in einen kleinen Beispielquelltext einbauen könntet.
Dev spuckt mir nämlich folgendes aus:
non-lvalue in assignmentSprich: Bin zu doof, ohne Beispiel mit diesem Befehl umzugehen +g+
Cya, Mäxl
-
http://www-user.tu-chemnitz.de/~heha/viewzip.cgi/hs_freeware/maus32.zip/warpcursorkey/warpcu32.c
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/systemparametersinfo.asp
-
Hmm.. ich weiss nicht, ob´s an mir oder an dem SPI liegt, jedenfalls bekomme ich den Keyboard Delay zwar immer langsamer, jedoch nicht schneller als die vorgegebenen "31" (maximum Windows und Bios)... und an der Verzögerungszeit (vom 1. bis zu den anderen Zeichen) ändert sich garnichts.
Ich hab mal meinen Sourcecode hochgeladen, dann seht ihr auch auf welchem (für euch wahrscheinlich ziemlich bescheidenen ^^) Stand ich mit meinen Kenntnissen bin.
http://home.arcor.de/7m-gte/peng_0.1alpha.rar
Das Programm ist wie schon erwähnt mit DevCPP geschrieben und lässt sich demnach auch dort ohne weiteres kompilieren.
Auch funktionstüchtig ist das Programm bereits, nur werdet ihr selbst sehen, wenn ihr es testet, dass der Keyboarddelay viel zu hoch ist und der Balken sich deshalb nicht schnell genug bewegen lässt
Cya, Mäxl
-
hab gerade diese funktion gefunden: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/keyboardinputreference/keyboardinputfunctions/getasynckeystate.asp
Ich glaub, es ist genau was du brauchst
erlich gesagt, fand ich dein program etwas komisch:
for (k=1;k==1;k=k+1); { func_key(); }
was bezweckst du damit? k bleibt ja sowieso immer 1...