Laden...

Graphics auf Hintergrund zeichnen ohne Spur

Erstellt von YamiSparrow vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.153 Views
Y
YamiSparrow Themenstarter:in
71 Beiträge seit 2008
vor 14 Jahren
Graphics auf Hintergrund zeichnen ohne Spur

Nabend allerseits. Hab ein Problem mit dem Zeichnen von Objekten.

Ich habe ein panel in dem ich zeichne, dort als Background image habe ich ein ebenso im code gezeichnetes Bitmap gelegt. Dadrüber will ich nun aber ein Auto fahren lassen ohne dass es eine Farbspur hinter sich herzieht. Gibt es da eine möglichst augenfreundliche variante ohne dass es flackert? danke im voraus!

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo YamiSparrow,

was genau meinst du mit Farbspur? Kannst du davon einen Screenshot machen?

Ansonsten siehe [FAQ] Flackernde Controls vermeiden / Schnelles, flackerfreies Zeichnen

herbivore

B
67 Beiträge seit 2009
vor 14 Jahren

Letzlich lohnt sich ein Blick in Herbivores Links.

Wenn du wirklich flackerfrei zeichnen willst, dann solltest du, jegliches Zeichnen dem Panel überlassen, das heisst, das Auto sollte kein Control mit Transparenz effekten sein welches du über das Panel bewegst.

Sollte das Auto ne Spur hinterlassen dann invalidierst du nach einer Positionsänderung des Autos das Panel nicht.

Nachdem sdu das auto also bewegt hast -> Invalidate();

Wichtig ist auch, das du jegliches Zeichnen in die OnPaint Methode verlagerst.

Gegen Flackerei hilft in der Regel DoubleBuffering.
Wenn du das Auto wie beschrieben zeichnest, kannst du das bereits vorhandene Buffering nutzen.

Im Konstruktor deines Panels:


            //Double Buffer
            this.SetStyle(
               ControlStyles.AllPaintingInWmPaint |
               ControlStyles.UserPaint |
               ControlStyles.OptimizedDoubleBuffer,
               true
               );
Y
YamiSparrow Themenstarter:in
71 Beiträge seit 2008
vor 14 Jahren

Hm.. das Problem ist, da ich das in einer Schulklasse mache sieht das ganze nicht immer so gut aus, wie ihr es hier meistens präsentiert. Wir haben uns (seltsamerweise) angewähnt panel.CreateGraphics(); zu nutzen.

würde das Flackerfreie zeichnen denn auch ohne e.Graphics gehen? Die frage ist nach OB nicht nach "Wie gehts besser", ihr schreibt ja eigentlich immer "deine variante ist müll, mach e.Graphics"..

nun es ist ein projekt, was ich morgen abgeben muss und möchte verständlicherweise nicht alles umschreiben müssen nur damit das damit geht.. besonders weil ich mich damit nicht sonderlich gut auskenne..

@herbivore: das zeichnen ist halt das typische Flackerproblem bzw, wenns nicht flackert dann löscht der die alte zeichnung nicht. Ich sitz hier am schulnotebook, wo kein paint oder sonstige grafikprogramme drauf sind. hoffe das geht auch ohne screenshot..

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo YamiSparrow,

Wir haben uns (seltsamerweise) angewähnt panel.CreateGraphics(); zu nutzen.

dann solltest du es dir besser gleich wieder abgewöhnen.

"deine variante ist müll, mach e.Graphics"..

So ist es. Und weil es nicht nur um etwas besser oder etwas schlechter geht, sondern um in Ordnung oder Schrott, solltest du dem Rat auch unbedingt folgen. Und ja, es ist wahrscheinlich, dass das Flackern nicht anders wegzubekommen ist.

herbivore

Y
YamiSparrow Themenstarter:in
71 Beiträge seit 2008
vor 14 Jahren

nun es ist ein projekt, was ich morgen abgeben muss und möchte verständlicherweise nicht alles umschreiben müssen nur damit das damit geht.. besonders weil ich mich damit nicht sonderlich gut auskenne..

Wenn du willst kann ich dir meinen kompletten Quellcode geben und du kannst ihn nach e.Graphics umschreiben... Wie gesagt, ich bin kein Profi und wir habens im unterricht nie anders gemacht und morgen ist abgabe.. ich wills echt nicht umschreiben müssen....

Gibts vielleicht Elemente, auf die man ein Bild legen kann und das "drumrum" transparent machen kann? dann würd ich einfach die methode verwenden..

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo YamiSparrow,

ich werde dir dein Projekt sicher nicht umschreiben und es ist nicht mein Problem, dass du wenig Zeit hast. Die Lösung hast du genannt bekommen. Wenn du wenig Zeit hast, solltest du anfangen, sie umzusetzen. Schwierig ist das nicht. Es ist alles gesagt.

herbivore