Picturebox mit der Maus bewegen



  • Hallo!
    Ich möchte ein Spiel namens Pong (Ping Pong) programmieren. Ich habe bereits eine picturebox erstellt welche ich mit meiner tastatur steuern soll und von welcher der ball wieder abprallt.

    Nun möchte ich es schaffen, mit meiner Maus diese picturebox in y-Richtung zu verschieben. hat irgendjemand eine Idee und könnte mir einn paar Tipps geben? 🙂



  • Du kannst dir ja die Y Koordinaten der Maus holen, und beim bewegen der Maus diese per Event updaten
    die Kooridnaten der Picture Box sind in der Regel die der oberen linken Ecke, mit der Größe der Box kannst du dann errechnen wo die mitte der Box wäre.

    Jedes mal wenn die Maus bewegt wird aktualisierst du die y Koordinate und setzt deine Picture Box auf die damit errechneten Koordinaten, viola 😉



  • das hört sich ja schon mal gut an.

    weißt du auch wie dieser befehl heißt?
    ich hätte gedacht es funktioniert mit dem befehl "MouseHover" 🙂



  • Ich weiß jetzt nicht was deine ausgangssituation ist aber wenn ich mal von nem nomralen formobjekt ausgehe dann gibts da ein mousemove event (unter maus)

    in dem Event würde ich dann mit Mouseposition.Y die Position ermitteln, ggf wie bereits gesagt berechnen und anschließend über die Position Eigenschaft der Picturebox diese auf die jeweilige Position setzen



  • Ich kann mich ZF nur anschließen.

    Nimm die Y-Eigenschaft aus dem Eventhandler und zack..
    C# wäre

    myPictureBox.Location = new Point(myPictureBox.Location.X, e.Location.Y - myPictureBox.Height/2);
    

    Der zweite Teil muss dabei sein da man X und Y nicht einzeln sonder nur den Point setzen kann. In der oben genannten Option wird die Picturebox, dann immer mit der Mitte auf höhe des Mauszeigers angezeigt.

    Für C++ ersetze new durch gcnew und . Durch -> und es müsste klappen.



  • ne, das klaapt leider nicht 😞

    das ist die fehlermeldung:

    \projekt spiel\pingpong (test)\pingpongapp\pingpongapp\Form1.h(575) : error C2664: 'System::Windows::Forms::Control::Location::set': Konvertierung des Parameters 1 von 'System::Drawing::Point ^' in 'System::Drawing::Point' nicht möglich
    1> Es ist kein benutzerdefinierter Konvertierungsoperator verfügbar, oder
    1> Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
    1>Das Buildprotokoll wurde unter "\Projekt Spiel\PingPong (Test)\PingPongApp\PingPongApp\Debug\BuildLog.htm" gespeichert.
    1>PingPongApp - 1 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========



  • Human3000 schrieb:

    ne, das klaapt leider nicht 😞

    das ist die fehlermeldung:

    \projekt spiel\pingpong (test)\pingpongapp\pingpongapp\Form1.h(575) : error C2664: 'System::Windows::Forms::Control::Location::set': Konvertierung des Parameters 1 von 'System::Drawing::Point ^' in 'System::Drawing::Point' nicht möglich
    1> Es ist kein benutzerdefinierter Konvertierungsoperator verfügbar, oder
    1> Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
    1>Das Buildprotokoll wurde unter "\Projekt Spiel\PingPong (Test)\PingPongApp\PingPongApp\Debug\BuildLog.htm" gespeichert.
    1>PingPongApp - 1 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    Post mal den CodeTeil wo der Fehler auftritt, is nich tragisch
    aber so kann ichs dir nich sagen xD



  • Probiers ohne das gcnew oder setze einfach die .Top eigenschaft entsprechend:
    Dass man X und Y nur zusammen Setzen kann ist falsch. (Also was ich geschrieben hab)..

    Aber das gleiche hätte google auch DIR gesagt.. 😉

    // Variante 1
    myPictureBox->Location = Point(myPictureBox->Location->X, e->Location->Y - myPictureBox->Height/2);
    
    // Variante 2
    myPictureBox->Top = e->Location->Y - myPictureBox->Height / 2;
    

    Ich persönlich würde die zweite nehmen 😃


Anmelden zum Antworten