2015-06-27 79 views
0

我有這樣的代碼C#GDI旋轉彈

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

和矩形以一個角度在一定方向出手,我怎麼能得到的矩形,同時移動或旋轉,在旋轉的全部。

+0

有很多關於旋轉物體的教程。嘗試谷歌 – deathismyfriend

+0

沒有任何幫助我解決這個問題。使用四元數旋轉的 –

+0

是很常見的。 –

回答

1

這應該旋轉一個在屏幕上移動的矩形。

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

在我看到@ steve16351的回覆之前,我已經想通了,但他的代碼仍然有用。我所做的是從使用PointF切換到Rectangle,因爲Rectangle具有一個保存左上角座標值的屬性,所以我可以以穩定的速度遞增/遞減,在我的遊戲循環中使其旋轉。