DirectInput Maus

  • Allgemein

Es gibt 34 Antworten in diesem Thema. Der letzte Beitrag () ist von Artentus.

    Ich verstehs immer noch nicht, sorry. Selbst wenn ich den Cursor in die Mitte setzt, muss ich doch zu Beginn trotzdem die Absolutposition abfragen, nur, dass ich diese halt dann selbst festlege. Aber ich halte es sowieso für keine gute Idee, einfach so den Cursor irgendwohin zu setzen.
    Der Cursor ist innerhalb deiner Anwendung spezifisch. Wie du ihn positionierst und wo, ist ja egal, solange das Feedback an der richtigen Position ist. Ich finde es mehr als lästig, wenn der Cursor bei einem Rpg einfa h mal schnell aus dem Fenster flitzt; selbiges gilt wohl auch für scrollende Spiele. Klickspiele oder Spiele mit fixiertem Sichtbereich sind davon halt nicht so betroffen.
    Spiele starten übrigens auch sehr häufig im Menümodus. Daher sehe ich kein Problem.

    Gruß
    ~blaze~
    Dann erklär mir doch bitte einfach mal: wie kann ich Bestimmen, wo der Cursor sich gerade befindet, wenn ich ein frei bewegliches Fenster habe und nur relative Bewegungen empfange.
    Und sei bitte nachsichtig, ich bin in solchen Sachen absoluter Noob (versuchs mir ja gerade erst beizubringen).
    Berechne die Koordinaten entweder relativ zur Fensterposition bzw. dem Punkt (0, 0). Dabei hast du einen Ursprung und die Cursorposition ergibt sich zu
    cursorPosition := cursorPosition + f(offset)
    f(offset) ist hierbei eine Funktion, die die Änderung der Mausposition einrechnet (Zeitintervall, etc.). cursorPosition ist zum Initialisierungszeitpunkt eben WindowSize/2. In der einfachsten Darstellung wäre f einfach die Identität:
    cursorPosition := cursorPosition + offset.
    Die Bewegung des Fensters läuft ja im Menümodus ab, im Menümodus könnte man btw. auch Windows Messages verarbeiten (damit wäre halt auch die Cursorsteuerung im OS-Stil).

    Gruß
    ~blaze~
    Hm, nur wie definiere ich "Menümodus"? Das ist ja alles für GameUtils, und die Engine weiß ja nicht, wofür sie benutzt wird. Was für eine Art Spiel es ist, ob es nun FullScreen oder Windowed ist und ob der Cursor ins Fenster geclippt wird oder nicht, weiß die Engine nicht. Oder sollte ich das dann noch stärker verknüpfen, also dass wirklich die gesamte Cursorsteuerung von der Engine geregelt wird?
    Alternativ: Es gibt ein IRenderableElement-Interface, das renderbare Elemente definiert (==>nur eine Render-Methode). "Kernelemente" sind bspw. ElementGroup(Of T As IRenderable), WorldElement3D, etc. Zusätzlich gibt's dann eben auch eine ControlElementGroup (Inherits ElementGroup(Of ControlItem)), das die Menüelemente, etc. definiert und auch deren Steuerung, etc. übernimmt. Menüelemente sind eben ControlItem, die eingehende Events verwalten können. Diese Elemente sind nicht IRenderableElement, sondern haben eine abstrakte Draw-Methode oder ebenfalls ein Template (siehe unten), die 2D-surfacebasiert abläuft. Layouting kannst du eben ebenfalls über solche overengineerten Konstrukte definieren, indem du ElementGroup(Of ControlItem) optional eine Layout-Property gibst, etc. Da sei deiner Fantasie mal keine Grenze gesetzt.
    Auf jeden Fall kannst du eben genau bei dieser ControlElementGroup eine Fokus-Funktionalität einbauen, die die Sichtbarkeit der Maus steuert.

    Folgendes, wenn du dich fragst, wie du beim obigen System das Rendering machen kannst, wenn du mich nicht eh schon zum Teufel jagst:
    Es gibt ein Root-Element, das den Renderer bereitstellt und eben von ElementGroup(Of T) erbt. Der Renderer stellt eben eine Art "Template" bereit, das ein Element rendern kann (==> haste auch gleich meine Overengineering-Methode für den D2D/GDI-Renderer, weil du den hübsch ausweiten kannst, Template kann auch ein Kompositum sein, das auf den Renderer gesetzt wird, der eben eine abstrakte Schnittstelle zum Rendern ist oder "kompatible" atomare Operationen, wie z.B. Kreise zeichnen, etc. durchführen kann).

    Ich hoffe mal, dass du nicht komplett verwirrt bist, bei mir sehen diese Engines immer etwas übertrieben aus.

    Gruß
    ~blaze~
    Also ich würde gerne einfach mal bei meinem jetzigen Rendering-System bleiben, wos nur ein IRenderable-Interface gibt und gut ist. :D Kannst du dir ja im Thread ansehen.
    Menüelemente sollen später noch kommen, aber ich brauche zuerst mal die Input-Klassen.