AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Spezielle Mausbewegungen erkennen

Offene Frage von ".chicken"
Ein Thema von .chicken · begonnen am 15. Apr 2008 · letzter Beitrag vom 28. Apr 2008
Antwort Antwort
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#1

Spezielle Mausbewegungen erkennen

  Alt 15. Apr 2008, 15:36
Hi, also ich arbeite mich ja im Moment in DirectX ein und möchte damit in naher (oder auch ferner ) Zukunft ein kleines 2D Spiel programmieren. Soll eine Art Action-Adventure-Rpg werden.

Dabei habe ich überlegt, wie ich das Kampfsystem interessant gestalten kann und bin auf folgende Idee gekommen:
Laufen tut man normal mit der Tastatur. Aktionen macht man, indem man die Maus speziell bewegt.
Wenn zB die linke Maustaste gedrückt ist und man die Maus kreisförmig bewegt wird ein Rundumschlag ausgeführt. Ruckelt man die Maus von links nach rechts, wird eine schnelle Hiebfolge ausgeführt. Versteht ihr was ich meine?

Jetzt brauche ich aber einen Weg, wie ich solche Mausbewegungen erkenne!? Ich bin noch lange nicht soweit, dass ich das Spiel programmiere oder das Feature einbaue, aber ich würd trotzdem schonmal gerne wissen wie man das macht und das in einem kleinen Beispielprogramm nachprogrammieren.

Hat wer Vorschläge oder weiss nach welchen Stichwörtern ich suchen könnte? Habe mir überlegt es einfach mit einem schwarz-weiss-Bild zu vergleichen (weisse Bereiche sind die "gültigen" in denen die Maus sich bewegen soll), aber das würde die Bewegung enorm einschränken (Weite der Bewegung zB). Andere Ideen?

Grüße
  Mit Zitat antworten Zitat
TurboMartin

Registriert seit: 13. Feb 2006
Ort: Bad Honnef
765 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Spezielle Mausbewegungen erkennen

  Alt 15. Apr 2008, 15:52
Vielleicht hilft dir dashier. Ist allerdings für .Net.
Tomorrow will be cancelled due to lack of interest.

  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Spezielle Mausbewegungen erkennen

  Alt 15. Apr 2008, 16:00
ich würde sobald die Maus sich x pixel vom letzten punkt weg bewegt diesen in eine Liste packen wo beispielsweise die letzten 100 Positionen drin stehen. Dann einfach diese Punkte nehmen und auf eine bestimmte größe skalieren so das es später keine rolle spielt ob der user einen großen oder kleinen Kreis "gemalt" hat. Dann dein Muster nehmen welches auf die gleiche Größe skaliert sein sollte und prüfen ob alle punkte des musters auch in den letzten punkten drin sind (natürlich eine gewisse tolleranz lassen.

Letzendlich ist das ganze unabhängig davon ob es mit der Maus gemacht wird oder nicht. Denn die eigentliche Aufgabe ist zu prüfen ob ein Muster in einem anderen enthalten ist.

(Die liste der letzten 100 Punkte (oder wieviele man auch immer maximal zulässt) natürlich leeren beim down der Taste und dann den Vergleich beim Mouseup der Taste starten. Wenn die geforderte Geste übereinstimmen soll und nicht nur enthalten sein soll im "gezeichneten", dann müssen beide "bilder" aufeinander geprüft werden)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#4

Re: Spezielle Mausbewegungen erkennen

  Alt 15. Apr 2008, 16:05
Die Idee dahinter hat mir schonmal geholfen, und da stand was von neuronalen Netzen also such ich damit mal weiter, danke

@ThornBerry: Der Ansatz gefällt mir gut, mal gucken wies mit der Umsetzung aussieht.

Danke
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#5

Re: Spezielle Mausbewegungen erkennen

  Alt 28. Apr 2008, 09:55
Also das Problem ist die flexibilität...

Wenn du einen "Kreis" forderst, so kriegst du vom User nichtmal ein Ei.

Versuch mal in Paint einen Kreis zu malen. Ich (ok, ich hab vielleicht nicht die grandiose Übung im "Kreise mit der Maus malen", aber es wird Leute geben die es noch schlechter können.) bekomme dann etwas raus, was bestenfalls als gekochtes Ei nach dem 3. Runterfallen zu beschreiben ist.
Ausserdem sind meine "Kreise" nur seltenst geschlossen, in der Regel sogar kaum mehr als Halbkreise.

Insofern kannst du dir meiner Ansicht nach Sachen wie "100 Punkte prüfen" ganz dezent abschminken

Mein Ansatz wäre folgender:

Du hast am Anfang eine Menge von Punkten.
Dann hast du eine gerasterte Fläche (in der Größenordnung 3x3 bis 5x5 Pixel).
Nach entsprechender skalierung zählst du, wie viele Punkte in jeder Fläche sind.
Nun guckst du für jedes Feld, wie gut die Übereinstimmung ist (Vielleicht |Ist - Soll| / Gesamtanzahl)
Diese Zahlenwerte addierst du nun einfach auf.
Nach kurzer mathematischer Betrachtung merkst du, dass dieser kumulierte Wert maximal 1 und minimal 0 sein kann (Bei genau entgegengesetztem und bei absolut exaktem Muster).
Jetzt sagst du einfach: wenn der Wert unter 0,2 liegt, dann nehme ich mal an, der User wollte das hier machen.
Wie genau diese Übereinstimmung berechnet wird kannst du ja immer noch anpassen, und die Größe des Rasters bliebe auch noch mal zu testen.
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Spezielle Mausbewegungen erkennen

  Alt 28. Apr 2008, 10:13
das mit den Punkten funktioniert weil man ja eine tolleranz erlaubt. Das gemalte muss ja nicht deckungsgleich sein sondern nur in einem Bereich des anderen sein.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#7

Re: Spezielle Mausbewegungen erkennen

  Alt 28. Apr 2008, 10:18
Zitat von SirThornberry:
das mit den Punkten funktioniert weil man ja eine tolleranz erlaubt. Das gemalte muss ja nicht deckungsgleich sein sondern nur in einem Bereich des anderen sein.
Und was machst du denn du nicht 100 punkte hast sondern zB 1000?
Schmeisst du dann jeden zehnten weg?

Was machst du, wenn du keinen Kreis hast, sondern eben nur nen 3/4-Kreis?

Oder, um es kurz zu machen:
Hast du eine Implementation, die eben das kann? Irgendwie glaube ich, dass man die Toleranz so hoch stellen muss, das es auch oft Fehlerkennungen gibt.....
(Ok, nicht das ich eine hätte )

Ist diese Punkte-Vergleich-Methode nicht eher was für Fotos/Bilderkennung?
Also zB bei Gesichtern, wo man sich ziemlich sicher sein kann, dass das Gesicht zumindest annähernd Oval ist und auch irgendwo zwei Augen zu finden sein werden...
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Spezielle Mausbewegungen erkennen

  Alt 28. Apr 2008, 12:01
*Kleinen Hinweis in die Diskussion werf*

In der JVCL ist eine Komponente für Mausgesten schon drin. Evtl. kann sich daran orientieren
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz