GDI+ / DirectX: Checken ob auf eine Zeichnung geklickt wird

  • VB.NET
  • .NET (FX) 4.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Alphashift.

    GDI+ / DirectX: Checken ob auf eine Zeichnung geklickt wird

    Hi

    Ich habe eine Frage. Wenn man Spiele mit Pictureboxen als Graphik-Container entwickelt ist das ja eine ziemlich schlechte Art Spiele zu entwickeln. Man kann aber auf die drauf drücken so das, dass Spiel weiß das ich auf eine Zeichnung in der Picturebox geklickt habe.

    Meine Frage ist jetzt: Wenn ich auf eine mit GDI+ gezeichneten Zeichnung klicke dann soll der Computer das ausführen was ich will (es wüsste also eine Art Event geben)

    Alos ich schreibe im Paint-Event der Form:

    VB.NET-Quellcode

    1. ​ e.Graphics.DrawImage(Image.FromFile("C:\bild.png"), New Point(10, 10))


    und wie kann ich jetzt abfangen wann auf die Zeichnung geklickt wurde?

    mfg :)
    1. niemals das Bild beim zeichnen Laden: Lade das Bild, speicher es in eine Variable und greif auf diese zurück. Das gilt für GDI genauso wie für DirectX
    2. Bau dir eine gescheite Architektur auf, bei welcher das Zeichnen gar nicht direkt im Paint-Event geschiet, sondern deine zu zeichnenden Elemente von einem Interface oder Klasse erben, mit einer Render-Methode(o.ä.), sodass du alles etwas allgemeiner gestaltest
    3. In jener Klasse kannst du dann auch Dinge wie größe und Position speichern, dass du genau wie mit PictureBoxen hantieren kannst
    4. Ebenso kannst du durch diese Informationen bei Maus-Ereignissen auf eine Kollision überprüfen und somit ein Event aufrufen.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Danke für die Tipps Es gibt nur ein Problem, also ich hab Probleme mit den Mauspositions-Befehlen:
    Wenn ich zum Beispiel eine weiße Picturebox an die Mausposition hefte dann ist die Picturebox irgendwie immer nie richtig am Cursor.
    Ich habs so probiert:

    VB.NET-Quellcode

    1. ​PictureBox1.Location = New Point(Cursor.Position.X, Cursor.Position.Y)
    Ähm - da gibts noch mehr Probleme.
    Nämlich punkt#2 von jvbsl - keine gescheite Architektur - Pictureboxen sind keine Zeichenobjekte!


    Für User-Interaktion hab ich immer eine Canvas-Klasse, "Zeichenfläche", von Control geerbt. Die hält Listen der ZeichenObjekte, ruft das Zeichnen auf, reagiert auf Mausklicks etc
    Kannst dir mal StoryCards - verschiebbare Zeichenobjekte angucken.

    Also das ist jetzt eine annere Architektur als jvbsl vorschlägt, weil halte ich so für besser.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()