amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Tastaturabfrage systemfreundlich ? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

26.03.2004, 16:29 Uhr

bubblebobble
Posts: 707
Nutzer
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



[ - Antworten - Zitieren - Direktlink - ]

26.03.2004, 18:19 Uhr

thomas
Posts: 7716
Nutzer

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/

[ - Antworten - Zitieren - Direktlink - ]

26.03.2004, 21:56 Uhr

bubblebobble
Posts: 707
Nutzer
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



[ - Antworten - Zitieren - Direktlink - ]

26.03.2004, 22:04 Uhr

AchimStegemann
Posts: 112
Nutzer
Wie wärs mit IDCMP_VANILLAKEY?

Gruß
Achim

[ - Antworten - Zitieren - Direktlink - ]

27.03.2004, 02:38 Uhr

bubblebobble
Posts: 707
Nutzer
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



[ - Antworten - Zitieren - Direktlink - ]

27.03.2004, 09:28 Uhr

thomas
Posts: 7716
Nutzer
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/

[ - Antworten - Zitieren - Direktlink - ]

27.03.2004, 09:44 Uhr

Mad_Dog
Posts: 1944
Nutzer
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. ]

[ - Antworten - Zitieren - Direktlink - ]

27.03.2004, 10:04 Uhr

thomas
Posts: 7716
Nutzer

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/

[ - Antworten - Zitieren - Direktlink - ]

27.03.2004, 12:11 Uhr

Goos
Posts: 69
Nutzer
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:

[ - Antworten - Zitieren - Direktlink - ]

27.03.2004, 12:29 Uhr

bubblebobble
Posts: 707
Nutzer
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



[ - Antworten - Zitieren - Direktlink - ]

27.03.2004, 12:38 Uhr

thomas
Posts: 7716
Nutzer
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/

[ - Antworten - Zitieren - Direktlink - ]

29.03.2004, 11:59 Uhr

Goos
Posts: 69
Nutzer
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:

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Tastaturabfrage systemfreundlich ? [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.