我正在做一个小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;
}
}
提前谢谢
答案 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();
关于计时器事件。 这将触发油漆事件。