Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

31.05.2004, 22:58

tbDirectInput Beispiel Programm Suchen Fkt-Maus zu schnell?

Hi,

hab mich jetzt am Wochenende fleissig durch das Buch "gekämpft" und bin nun bei DI angekommen.

Leider funktioniert das Beispiel Programm nicht so wie erwartet.

Wenn ich auf den Suchen Button drücke kommt direkt der Bestätigungston und dann hat er direkt die "x-Achse negativ" meiner Logitech MX700 ausfindig gemacht..

Ich komme gar nicht dazu was anderes auszuwählen, da er immer durch die hohe Abtastrate meiner Maus irgendeine Bewegung erkannt haben will.

Mit den Verzögerungszeiten und Anfangszeiten der Fkt tbDirectInput::WaitForButton() herumzuspielen war auch nicht erfolgreich.

Die Idee das alle Aktionen "Buttons" sind finde ich gut, aber hier funktioniert es anscheinend nicht..

Kann jemand helfen?

Danke

Gruß
Deckhead

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

31.05.2004, 23:16

Versuch doch mal Folgendes: Klicke nicht auf den "Suchen"-Button, sondern drücke die "S"-Taste. Wenn Du die Maus nun gar nicht bewegst, findet er trotzdem eine Bewegung der x-Achse?

Alternativ solltest Du den Code des tbDirectInput-Beispielprogramms mal so abändern:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
        case IDC_SEARCH:
            // Die aktuelle Aktion abfragen
            dwAction = (DWORD)(SendDlgItemMessage(hDlg, IDC_ACTIONS, CB_GETCURSEL, 0, 0));
            if(dwAction != (DWORD)(CB_ERR))
            {
                // Kurz warten
                tbDelay(100);

                // Warten, bis ein Knopf gedrückt wurde
                iButton = tbDirectInput::Instance().WaitForButton();
                if(iButton != -1)
                {


Neu ist die Zeile unter "// Kurz warten", damit der Knopf, den man zum Anklicken des Buttons brauchte, nicht direkt erkannt wird.

3

01.06.2004, 22:46

Hi David,

vielen Dank für die schnelle Antwort!

Das mit dem tbDelay hat leider auch nicht gefruchtet :-(

Es liegt anscheinend wirklich an meiner Maus. Die Optic Maus hat halt ne sehr hohe Abtastrate ( dafür hab ich sie ja auch gekauft :-) ) und die meldet halt bei jeden Abtasten eine andere Position.

Das einzige was mir jetzt noch dazu einfällt ist, die Funktion so umzuschreiben, daß man die x/y Achse der Maus bei der Routine ausklammert!

Oder fällt dir noch was ein?

Gruß
Deckhead

Klaus

Treue Seele

Beiträge: 245

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

4

02.06.2004, 00:15

Trotz hoher Abtastrate sollte deine Maus aber doch keine andere Position melden, wenn du sie nicht bewegst?!
Es ist ja schließlich der Sinn der (optischen) Maus, tatsächliche Bewegungen zu erspüren und zu melden - und nicht ohne Zutun zu "wackeln".

Wenn nichts hilft, könnte ich mir noch vorstellen, dass du bei der Maus - wie es beim Joystick schon der Fall ist - eine tote Zone einbaust, indem du bei jedem Frame zu kleine Veränderungen der Position (kleine Werte für die Achsen-"Buttons") natürlich abhängig von der Zeit verwirfst.
Mozilla Firefox
The Browser - reloaded

5

02.06.2004, 09:44

Zitat von »"Klaus"«

Trotz hoher Abtastrate sollte deine Maus aber doch keine andere Position melden, wenn du sie nicht bewegst?!
Es ist ja schließlich der Sinn der (optischen) Maus, tatsächliche Bewegungen zu erspüren und zu melden - und nicht ohne Zutun zu "wackeln".

Keine Ahnung hab irgendwo gelesen das die Maus 129 Bewegungsmessages pro sekunde verschickt.
Und es reicht ja aus, wenn sie 129 mal die selbe Position schickt, um die waitforinput Methode durcheinander zubringen

Zitat von »"Klaus"«


Wenn nichts hilft, könnte ich mir noch vorstellen, dass du bei der Maus - wie es beim Joystick schon der Fall ist - eine tote Zone einbaust, indem du bei jedem Frame zu kleine Veränderungen der Position (kleine Werte für die Achsen-"Buttons") natürlich abhängig von der Zeit verwirfst.


Das ist ne gute Idee. Werde das mal in die "tb" Klasse einbauen. Mal schauen was dann ist.

Klaus

Treue Seele

Beiträge: 245

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

6

03.06.2004, 00:32

Zitat von »"Deckhead"«

Keine Ahnung hab irgendwo gelesen das die Maus 129 Bewegungsmessages pro sekunde verschickt.

Nein, eigentlich nicht! Du fragst ja bei jedem Frame die Maus ab, und nicht in dem Moment, in dem sie selbst eine neue (oder alte) Position sendet.

Zitat von »"Deckhead"«

Und es reicht ja aus, wenn sie 129 mal die selbe Position schickt, um die waitforinput Methode durcheinander zubringen

Wenn die Maus 129 mal *die selbe Position* schicken würde, wäre der Unterschied zwischen der aktuellen und der Vorherigen Position immernoch 0. Demnach dürfte die WaitForInput Methode nicht anschlagen.
Mozilla Firefox
The Browser - reloaded

Werbeanzeige