Je pense que le problème est que vous définissez l'angle de l'image comme celui-ci Missle_ROT.TransformMatrix = Matrix3x2.CreateRotation((float)radians);
.
Le système de coordonnées est comme ceci:
Ainsi, lorsque vous utilisez Matrix3x2.CreateRotation Method (Single) pour faire pivoter l'image, il en rotation avec le point central par défaut qui est aussi le point en haut à gauche de cette image. En tant que solution, vous pouvez utiliser Matrix3x2.CreateRotation Method (Single, Vector2) pour spécifier le centre de rotation, et pour votre scénario, ce centre devrait être le centre de votre image. Vous pouvez avoir un test comme celui-ci:
var image = await CanvasBitmap.LoadAsync(sender, "Assets/solidimg.png");
var transform = new Transform2DEffect() { Source = image };
//draw image's left-top point (0,0) of the image
args.DrawingSession.DrawCircle(new Vector2(200, 200), 10, Colors.Black);
//draw image with no trasform effect
transform.TransformMatrix = Matrix3x2.CreateRotation(0);
args.DrawingSession.DrawImage(transform, 200, 200);
//draw image with trasform effect and center on the (0,0) point
transform.TransformMatrix = Matrix3x2.CreateRotation((float)(20 * Math.PI)/180);
args.DrawingSession.DrawImage(transform, 200, 200);
//draw image's center point of the image
args.DrawingSession.DrawCircle(new Vector2((float)(200 + image.Size.Width/2), (float)(200 + image.Size.Height/2)), 10, Colors.Red);
//draw image with trasform effect and center on the image's center
transform.TransformMatrix = Matrix3x2.CreateRotation((float)(20 * Math.PI)/180, new Vector2((float)image.Size.Width/2, (float)image.Size.Height/2));
args.DrawingSession.DrawImage(transform, 200, 200);
Et pour votre dernier code pour dessiner l'image args.DrawingSession.DrawImage(Missle_ROT, Convert.ToSingle(pointX), Convert.ToSingle(pointY));
, il tirer encore l'image du (0,0) le point, vous devez également calculer le point central de l'image à la « pointx » et « pointu » comme ceci:
args.DrawingSession.DrawImage(Missle_ROT, Convert.ToSingle(pointX- (float)image.Size.Width/2), Convert.ToSingle(pointY- (float)image.Size.Height/2));
et où est le sprite de missile? et la description du système de coordonnées? – Spektre
La rotation positive est-elle dans le sens des aiguilles d'une montre (Windows par défaut), ou dans le sens inverse des aiguilles d'une montre? – ja72