翻转绘制的图像

时间:2014-04-23 07:48:52

标签: c# winforms draw game-physics

我正在做一个小C#项目,它要求我移动已经绘制到表单中的图像。这是绘图算法:

public void DrawImagePoint(PaintEventArgs e)
{
    // Create image.
    newImage = A_Worm_Nightmare.Properties.Resources.Worm;
    // Create Point for upper-left corner of image.
    Point ulCorner = new Point(50, 50);
    // Draw image to screen.
    e.Graphics.DrawImage(newImage, ulCorner);
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
    DrawImagePoint(e);
}

问题:如何在WinForms中翻转已绘制的对象,因为在计时器中实现此方法是不可能的? (timer_Tick不支持PaintEventArgs)点击是Cursor.Position.X。这是普通`Picturebox“的算法:

private void timer1_Tick(object sender, EventArgs e)
{
    bool Ok = true;

    if (Cursor.Position.X <= 135 && Ok)
    {
        image.RotateFlip(RotateFlipType.RotateNoneFlipY);
        Ok = false;
    }
    else if (Cursor.Position.X >= 135 && !Ok)
    {
        Ok = true;
    }
}

提前谢谢

2 个答案:

答案 0 :(得分:0)

你肯定需要一个计时器。只需更改计时器刻度线中的位置并致电Invalidate,即可重新制作表单。

private Point location = Point.Empty;
private Image newImage;
private void OnTimerTick(object sender, EventArgs e)
{
    location.Offset(1,1);
    //Do flipping here
    newImage.RotateFlip(RotateFlipType.RotateNoneFlipY);
    this.Invalidate();//Makes form to repaint
}

public void DrawImagePoint(PaintEventArgs e)
{
    if(newImage == null)
    {
        newImage = A_Worm_Nightmare.Properties.Resources.Worm;    
    }
    e.Graphics.DrawImage(newImage, location);
}

您可以设置任何频率的计时器,这应该有效。

另请注意,Resources.Image每次查询时都会创建新的Image。因此,您应该将图像缓存到某处以避免这种开销。

答案 1 :(得分:0)

我明白你要做什么。 你必须打电话

this.Refresh();

关于计时器事件。 这将触发油漆事件。