amiga-news 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:
Nein, bei IDCMP_RAWKEY bekommst du nur den Anschlag
und weiter je nach Einstellungen in den Prefs, (Keyrepeat).
Damit kann man aber nix anfangen.


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:
Original von bubblebobble:


Wie ist das z.B. bei Quake gemacht ?


Beim Quake2-Port wird die Tastatur- sowie die Mausradabfrage auch über IDCMP_RAWKEY gemacht.

Gruss Goos
:smokin:

[ - 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:
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.


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 :smokin:

[ - 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.
.