Editor-Input



  • Hallo,

    bei meinem MFC-Editor soll man sich wie in einem 3rd-Person-Shooter bewegen könne. Ich mache meinen Input zur Zeit so, dass ich auf Nachrichten wie WM_KEYDOWN und WM_MOUSEMOVE reagiere und je nachdem die Position und Rotation ändere. Danach sorge ich mit der Methode Invalidate() dafür, dass der Client-Bereich neu gezeichnet wird. Allerdings ist die Steuerung etwas ruckartig. Welche andere Methoden gibt es, um den Input bei einem Editor zu realisieren?
    Außerdem habe ich das Problem, dass die Methode OnLMouseButton() nicht aufgerufen wird, wenn ich die Maustaste die ganze Zeit gedrückt halte! Ist das normal?



  • Das "ruckartig" kommt einzig und allein davon, dass zu lange braucht um dein fenster neu zu zeichnen. Warum glaubst verwendet man in DX frontbuffer, backbuffer, ... ect. wenn es das nicht brachen würde.. 🤡

    OnLMouseButton() ??? wasn das? ich kenne OnLButtonDown - kommt wenn du drauf drückst, OnLButtonUp - kommt wenn du los lässt, OnLButtonDblClk - kommt bei nem doppelklick.



  • ja, genau. Das meinte ich: OnLButtonDown
    Und das Event wird nur gesendet, wenn der Mouse-Button neu gedrückt wird?



  • Oder wie kann man so etwas wie eine Main-Loop einbauen? Dann könnte ich auch DirectInput verwenden.



  • Geht doch ganz einfach über ein Flag. Setzte es mit LButtonDown, resete es mit LButtonUp und so lange das flag 1 wandert dein mänchen.
    Aber überlget dir gut ob du wirklich weiter auf der MFC schiene bleiben willst, CDC ist einfach nicht zum rendern von bewegten Obejkten gebaut worden und wir dir nichts als probleme machen bei so was... 😉



  • Ja, das habe ich mir auch schon überlegt. (ich arbeite übrigens mit Direct3D)
    Aber dann brauche ich ja auch eine Main Loop! (ich muss diesen Wert ja auch abtesten und je nachdem eine Aktion ausführen)
    Ich denke, dass ich es jetzt so machen werde:
    Ich überschreibe die OnIdle-Methode, von dort aus rufe ich dann weiter Methoden von CMainFrame, danach von C3DView auf. Ich werde dort dann am besten einfach DirectInput einsetzen. Würde doch klappen, oder?


Anmelden zum Antworten