C# GDI Rotate Projectile

114 views Asked by At

I have this code

Graphics g;
g.FillRectangle(new SolidBrush(Color.Red), _Location.X - 2, _Location.Y - 2, 10, 10);

and the rectangle is shot at an angle to some direction, how can I get the rectangle to rotate while moving or rotate at all.

2

There are 2 answers

0
steve16351 On

This should rotate a rectangle moving across the screen.

private int _angle = 0;
private Point _location = new Point(0, 0);

private void _timer_Tick(object sender, System.EventArgs e)
{
    // nothing interesting here, moving the top left co-ordinate of the         
    // rectangle at constant rate
    _location = new System.Drawing.Point(_location.X + 2, _location.Y + 2);
    _angle += 5; // our current rotation angle
    this.Invalidate();
}

void Form1_Paint(object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;            
    // rebase the co-ordinate system so our current x,y is 0, 0 and that is   
    // the center of the rotation
    g.TranslateTransform(_location.X, _location.Y, MatrixOrder.Append);
    g.RotateTransform(_angle); // do the rotation
    // make sure the centre of the rectangle is the centre of rotation (0, 0)
    g.FillRectangle(new SolidBrush(Color.Red), -5, -5, 10, 10);
}
0
Moeyy AS On

I've figured it out right before I saw @steve16351 's response, but his code was still useful. What I did was switch from using PointF to Rectangle, because the Rectangle has a property which holds the value of the upper left corner's coordinates, so I can increment/decrement that at a stable rate, in my game loop, to make it rotate.