在Windows窗体中移动图形

时间:2010-12-29 18:05:33

标签: c# graphics rotation

我正在尝试使用c#创建一个简单的游戏来更好地了解语言。

游戏很简单:玩家可以控制周围的船只,也可以拍摄一些也能移动的东西。

到目前为止,我有这个:

public partial class Form1 : Form
{
    Rectangle r1 = new Rectangle(new Point(100, 100), new Size(100, 150));
    Matrix rotateMatrix = new Matrix();
    GraphicsPath gp = new GraphicsPath();

    public Form1()
    {
        InitializeComponent();
        gp.AddRectangle(r1);
    }

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        g.SmoothingMode = SmoothingMode.HighQuality;
        g.DrawRectangle(new Pen(Color.Beige), r1);
        this.lblPoint.Text = "X-pos: " + r1.X + " Y-pos: " + r1.Y;
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        switch (e.KeyCode)
        { 
            case Keys.D:
                r1.X += 10;
                break;
            case Keys.A:
                r1.X -= 10;
                break;
            case Keys.W:
                r1.Y -= 10;
                break;
            case Keys.S: 
                r1.Y += 10;
                break;
            case Keys.T:
                rotateMatrix.RotateAt(45, new Point(50, 50));
                gp.Transform(rotateMatrix);
                break;
            default:
                break;

        }             
        Invalidate();
        Update();
    }
}

到目前为止,我可以将矩形(容器)移动得很好,但是当使用键旋转矩形时没有太多发生,我似乎无法弄清楚什么是错的。 我希望能够顺时针和逆时针旋转容器。

我做错了什么,或者根本没做什么?

1 个答案:

答案 0 :(得分:2)

以下链接对您有用吗? Rotate Example VB.NET or C#

  

引用MSDN链接:
  以下示例是为...而设计的   使用Windows窗体,它   需要PaintEventArgs e,一个OnPaint   事件对象。代码执行   以下行动:

     

之前在屏幕上绘制一个矩形   应用旋转变换(   蓝色矩形)。创建一个矩阵和   旋转45度。适用于此   矩阵变换为矩形。   将变换后的矩形绘制到   屏幕(红色矩形)。

public void RotateExample(PaintEventArgs e)
{
Pen myPen = new Pen(Color.Blue, 1);
Pen myPen2 = new Pen(Color.Red, 1);
// Draw the rectangle to the screen before applying the transform.
e.Graphics.DrawRectangle(myPen, 150, 50, 200, 100);
// Create a matrix and rotate it 45 degrees.
Matrix myMatrix = new Matrix();
myMatrix.Rotate(45, MatrixOrder.Append);
// Draw the rectangle to the screen again after applying the
// transform.
e.Graphics.Transform = myMatrix;
e.Graphics.DrawRectangle(myPen2, 150, 50, 200, 100);
}

关于你所说的更好地学习语言,我认为创建一个围绕业务的应用程序可能是一个更好的选择,以便更好地掌握C#。如果你真的想制作游戏,我建议XNA基本上是用.NET创建游戏的框架。