DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > Tastaturabfrage systemfreundlich ? | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2004-03-26, 16:29 h bubblebobble Posts: 707 User |
Wie kann man eine Taste auf dem Keyboard systemfreundlich abfragen ? Ich meine nicht IDCMP_RAWKEY oder sowas, ich muss wissen wie lange sie gedrückt ist oder wann sie losgelassen wird. -- Thilo Köhler, Author von: HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, Asteroids, UDM, TKPlayer, TKUnpacker Homepage: http://www.hd-rec.de [ - Answer - Quote - Direct link - ] |
2004-03-26, 18:19 h thomas Posts: 7718 User |
Mit IDCMP_RAWKEY bekommst du mit, wann eine Taste gedrückt wird und wann sie losgelassen wird, das sollte doch reichen. Ansonsten schau dir mal die lowlevel.library an, QueryKeys(). Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Answer - Quote - Direct link - ] |
2004-03-26, 21:56 h bubblebobble Posts: 707 User |
Nein, bei IDCMP_RAWKEY bekommst du nur den Anschlag und weiter je nach Einstellungen in den Prefs, (Keyrepeat). Damit kann man aber nix anfangen. Die lowlevel.lib will ich nicht nutzen. Gehts noch irgendwie anders ? -- Thilo Köhler, Author von: HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, Asteroids, UDM, TKPlayer, TKUnpacker Homepage: http://www.hd-rec.de [ - Answer - Quote - Direct link - ] |
2004-03-26, 22:04 h AchimStegemann Posts: 112 User |
Wie wärs mit IDCMP_VANILLAKEY? Gruß Achim [ - Answer - Quote - Direct link - ] |
2004-03-27, 02:38 h bubblebobble Posts: 707 User |
Vanilla key ist das gleiche wie RawKey, nur wird der RawKey über den Tastaturbelegung gemapped. Reagieren tuen aber beide gleich. Es gibt also keine Möglichkeit, die Tastatur abzufragen für ein Spiel, sodass es systemkonform und überall läuft !? (von der lowlevel.library mal abgesehen). Wie ist das z.B. bei Quake gemacht ? -- Thilo Köhler, Author von: HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, Asteroids, UDM, TKPlayer, TKUnpacker Homepage: http://www.hd-rec.de [ - Answer - Quote - Direct link - ] |
2004-03-27, 09:28 h thomas Posts: 7718 User |
Zitat: Du bekommst einen Key-Down-Event, mehrere Key-Repeat-Events (die du getrost ignorieren kannst) und einen Key-Up-Event. Das reicht vollkommen. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Answer - Quote - Direct link - ] |
2004-03-27, 09:44 h Mad_Dog Posts: 1944 User |
Was stört Dich an IDCMP_RAWKEY? Wenn Du wissen willst, wie lange die Taste gedrückt wurde, mußt Du eben die Zeit stoppen. Oder meinst Du eine portable Möglichkeit, die Tastatur abzufragen? Also bei OpenGL und GLUT kannst Du Tastatur und Joystickabfrage portabel machen. D.h. Du kannst dann solch ein Programm auf einem anderen Zielsystem neu compilieren, ohne eine Zeile Code zu ändern. Hier mal ein Beispiel für Tastatur/Joystickabfrage mit GLUT: http://us.aminet.net/dev/src/RocketCar12.lha -- http://www.norman-interactive.com [ Dieser Beitrag wurde von Mad_Dog am 27.03.2004 editiert. ] [ - Answer - Quote - Direct link - ] |
2004-03-27, 10:04 h thomas Posts: 7718 User |
Hier ist ein Beispiel, wie man es mit RAWKEY machen kann: http://home.t-online.de/home/thomas-rapp/download/KeyJoy.c Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Answer - Quote - Direct link - ] |
2004-03-27, 12:11 h Goos Posts: 69 User |
Zitat: Beim Quake2-Port wird die Tastatur- sowie die Mausradabfrage auch über IDCMP_RAWKEY gemacht. Gruss Goos [ - Answer - Quote - Direct link - ] |
2004-03-27, 12:29 h bubblebobble Posts: 707 User |
Sicher ? Aber das geht doch gar nicht, da IDCMP_RAWKEY schon aufbereitet ist, also mit KeyRepeat und so. So kann ich niemals herausfinden, ob eine Taste wirklich gerade gedrückt ist oder nicht, zumindest nicht in angemessener zeitlichen Auflösung. Ich habe aber nun eine relativ elegante Lösung gefunden: keyboard.device öffnen. Dann KEB_READMATRIX schicken mit dem Pointer auf 13bytes, die danach als Bitmap den Tasten Status jeder einzelnen Taste im Augenblick enthalten. Die gewünschte Taste oder Tasten kann man dann ganz einfach durch Ausmaskieren oder BTST abfragen. Das sind ca. 10-15 Zeilen zum init, eine Zeile zum Matrix abholen und eine Zeile zum Taste testen und 5 Zeilen zum Freen. Hab das im Asteroids eingebaut. Mals sehen obs überall funzt. -- Thilo Köhler, Author von: HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, Asteroids, UDM, TKPlayer, TKUnpacker Homepage: http://www.hd-rec.de [ - Answer - Quote - Direct link - ] |
2004-03-27, 12:38 h thomas Posts: 7718 User |
Zitat: Du mußt träumen. Du bekommst sofort, wenn eine Taste gedrückt wird eine Nachricht und sobald sie losgelassen wird wieder. Du bekommst sogar die Uhrzeit mitgeliefert, wann das passiert ist. Das Repeat kannst du getrost ignorieren, habe ich schon gesagt. Schau dir doch mal mein Beispiel an, da wird es genau so gemacht. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Answer - Quote - Direct link - ] |
2004-03-29, 11:59 h Goos Posts: 69 User |
Hier den Q2-Codeausschnitt:code:while (imsg = (struct IntuiMessage *)GetMsg(g_pMessagePort)) { sys_msg_time=(imsg->Seconds-inittime)*1000+imsg->Micros/1000; switch(imsg->Class) { case IDCMP_RAWKEY: if ((0x7F & imsg->Code) == 122 || (0x7F & imsg->Code) == 123) { mouse_wheel_used = 1; //18-AUG-02 switch(imsg->Code) { case 0x7A: Key_Event(K_MWHEELUP, true, sys_msg_time, -1); break; case 0xFA: Key_Event(K_MWHEELUP, false, sys_msg_time, -1); break; case 0x7B: Key_Event(K_MWHEELDOWN, true, sys_msg_time, -1); break; case 0xFB: Key_Event(K_MWHEELDOWN, false, sys_msg_time, -1); break; } } if ((imsg->Code)&0x80) Key_Event(MapKey((imsg->Code)&0x7f),false,sys_msg_time, ENCODEKEY(imsg->Code, imsg->Qualifier)); else Key_Event(MapKey(imsg->Code),true,sys_msg_time, ENCODEKEY(imsg->Code, imsg->Qualifier)); break; hoffe der hilft. gruss Goos [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > Tastaturabfrage systemfreundlich ? | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |