Einzelnes Image Objekt aus Graphics rotieren - GraphicsPath****

phap69

Mitglied
Hallo zusammen,

habe folgendes Problem. Ich versuche eine Form des Atari Asteroids in c# nachzuprogrammieren.

Ich habe also ein Grafikobjekt auf der Form und lasse dieses rotieren. Das mache ich mit einer Matrix. Geht auch ganz gut.

Jetzt möchte ich weitere Grafikobjekte über die Paint-Methode der Form hinzufügen (die Asteroiden, quasi) und nach wie vor nur eines (natürlich das Raumschiff ;) ) rotieren lassen.

Code:
private void Form1_Paint(object sender, PaintEventArgs e)
        {
           Graphics g = e.Graphics;           
           //Methoden zum Zeichnen der Objekte
        }

Mein erster Gedanke, war, dies über GraphicsPath zu realisieren, da ich darauf die Transform der Matrix anwenden kann. GraphicsPath erlaubt es mir aber nicht, ein Bild (Image oder Bitmap) hinzuzufügen, richtig?

Aktuell füge ich alle Bilder mittels:

Code:
g.DrawImage(image, rect);

ein, wobei rect ein Techteck ist, welches image aufnimmt und dieses skaliert-

Code:
Point pt = new Point(rect.X + size.Width / 2, rect.Y + size.Height / 2);
Matrix myMatrix = new Matrix();
myMatrix.RotateAt((float)rotation, pt, MatrixOrder.Append);
g.Transform = myMatrix;

Rotiert wunderbar alle Objekte auf dem Formular. Ich will aber nur ein einziges rotieren lassen.



Wer weiß Rat? Ist wahrscheinlich ganz simpel, kenne mich mit den Grafiksachen halt noch nicht so gut aus.

Vielen Dank für jeden Tipp!
 
Super, das klappt. Vielen Dank!:)

Mit
Code:
            GraphicsState grast = g.Save();//Speichert den Zustand vor der Rotation
            //Drehungen
            if (rotation != 0)
            {
            rotate(g); //Methode zur Rotation der Matrix
            }
            g.DrawImage(image, rect);
            g.Restore(grast);//Neuzeichnen des gespeicherten Zustands

kann ich ein Sprite rotieren, während die anderen ohne Probleme auf ihrer gewohnten Bahn bleiben und sich bewegen!

Ich hatte mir bereits die Finger wundgesucht müber den Ansatz mit GraphicsPath!
 
Zurück