Picturebox drehen

  • geschlossen
  • C#

  • 360Boarder
  • 3741 Aufrufe 4 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Picturebox drehen

    Hi Leute.

    Ich programmiere gerade an einem Spiel. Das kennen sicher einige von euch,... man hat ein Spielfeld (8x8 Pictureboxen). In jeder PictureBox ist ein Bild von einem Rohr... Ziel des Spiels ist es, die Rohre (also die Pictureboxen) so zu drehen das sie zusammenpassen, also damit am Schluss ein langes Rohr rauskommt durch das irgend eine Flüssigkeit fließen kann...

    Das mit dem Drehen der Bilder in der Picturebox habe ich mit Klickevents und "Image.RotateFlip" gelöst... hier der Code

    picbox_felder[] ist ein Array von Pictureboxen und geht bis 63, weil ich 63 Spielfelder habe...

    Quellcode

    1. //Methode - Dreht das Rohr bei Linksklick nach link, bzw. bei Rechtsklick nach Rechts
    2. public void drehe_rohr(int feld, MouseEventArgs e)
    3. {
    4. if (e.Button == MouseButtons.Left)
    5. {
    6. picbox_felder[feld].Image.RotateFlip(RotateFlipType.Rotate90FlipNone);
    7. picbox_felder[feld].Refresh();
    8. Console.WriteLine("Left");
    9. }
    10. else if (e.Button == MouseButtons.Right)
    11. {
    12. picbox_felder[feld].Image.RotateFlip(RotateFlipType.Rotate90FlipNone);
    13. picbox_felder[feld].Refresh();
    14. Console.WriteLine("Right");
    15. }
    16. }
    17. //Klickevent der ersten Picurebox (also des ersten Spielfeldes)
    18. private void feld_1_MouseDown(object sender, MouseEventArgs e)
    19. {
    20. drehe_rohr(0, e);
    21. }
    Alles anzeigen


    Nur gibt es dabei ein Problem... manchmal wird das Bild nicht gedreht wenn man draufklickt, obwohl er in die Methode "drehe_rohr()" reingeht.... Console.WriteLine("Right") bzw Console.WriteLine("Left") wird immer ausgeführt...

    Weis jemand woran das liegt??

    lg.Boarder

    [FONT="Century Gothic"]"...erst wollte ich was über deine dürren Ärmchen sagen, doch dann fiel mir deine hässliche Fresse auf..." (Gothic 1 ist Kult)[/FONT]

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von 360Boarder ()

  • Sind die Gurus alle im Urlaub?
    Grafik ist nicht meine Stärke, aber ich versuche es mal.

    Zu VB6-Zeiten gab es mal Probleme in dem Bereich Refresh.
    Das hatte mit Multithreading und blockierten Threads zu tun.
    Einfach gesagt: Er hat den Refresh gemacht, bevor er mit dem Zeichnen fertig war.

    Um zu sehen, ob Microsoft dieses "Feature" in das .net Konzept übernommen hat,
    kann man einen einfachen Test machen:

    Baue einen Button ein, der den Refresh auf das geänderte Element auslöst.
    Sollte der nachgeschobene Refresh erfolgreich sein, dann ist das ein Hinweis auf das alte Problem.
    Dazu kann man sich dann Lösungen ausdenken.
    Wenn es nicht hilft, hilft nur weiter nachdenken ...
    Es ist besser zu schweigen und für einen Narren gehalten zu werden, als zu reden und damit alle Zweifel zu beseitigen ...
  • Hey, erstmal danke für deine Hilfe...

    Hab jetzt einen Button gemacht der alle Pictureboxen "refresht".. Doch nun bin ich etwas verwirrt, denn wenn ich zuerst auf ein Bild klicke und dann auf diesen Button, dreht er gleich alle Pictureboxen in denen das gleiche Bild ist, auch mit...
    Kann das irgendwas mit der Art zutun haben, wie die Bilder am Anfang in die Picturebox geladen werden??


    PROBLEM GELÖST:

    Ich hab 6 verschiedene Bilder von Rohren, diese habe ich ganz am Anfang in ein Image Array reingeladen. Beim starten des Spiels wurde dann das Spielfeld (Array von 63 Pictureboxen) mit den Bildern aus dem Image Array aufgefüllt. Und da lag auch schon das Problem. Da jedes der 6 Rohr Bilder nur einmal geladen wurde gab es beim Drehen und "Refreshen" solche Probleme... Genauer kann ichs jetzt auch nicht erkären.

    Auf jedenfall sag ich DANKE, denn ohne deinen Tipp wär ich eh nie drauf gekommen..

    [FONT="Century Gothic"]"...erst wollte ich was über deine dürren Ärmchen sagen, doch dann fiel mir deine hässliche Fresse auf..." (Gothic 1 ist Kult)[/FONT]

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von 360Boarder ()

  • Wenn ich jetzt hier reinschreibe:
    "Gerne geschehen"
    Dann wird das sicherlich als nutzloses Posting wieder rausgeworfen.
    Aber es ist dennoch ernst gemeint.
    Und es ist mein 200. Posting.
    Es ist besser zu schweigen und für einen Narren gehalten zu werden, als zu reden und damit alle Zweifel zu beseitigen ...
  • wasawasa schrieb:

    Wenn ich jetzt hier reinschreibe:
    "Gerne geschehen"
    Dann wird das sicherlich als nutzloses Posting wieder rausgeworfen.
    Aber es ist dennoch ernst gemeint.
    Und es ist mein 200. Posting.


    :löl: Werde mal nicht so sein und dein 200. Beitrag am Leben lassen.

    (Ich poste, weil, wenn der Mod seinen 2xxx. Post spammt, es okay ist, dass du dein 200. erschlichen hast :D)

    Ich mach hier mal dicht => Closed

    Gruß
    Broken Sword
    Auf dem Abstellgleis sah man ihn liegen,
    Auf dem Abstellgleis zwischen Schwelle und Gestein,
    Auf dem Abstellgleis im strömenden Regen,
    Auf dem Abstellgleis allein.