【发布时间】:2012-10-31 14:45:51
【问题描述】:
首先是代码。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace winform_project
{
public partial class Form1 : Form
{
void movement_correct(PictureBox pic, int i)
{
System.Threading.Thread.Sleep(25);
pic.Top += (i - 1);
pic.Left += (i + 3);
}
void movement_up(PictureBox pic, int i)
{
System.Threading.Thread.Sleep(25);
pic.Top -= (i - 1);
pic.Left -= (i + 3);
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 5; i++)
{
movement_correct(pictureBox1, i);
movement_correct(pictureBox2, i);
movement_correct(pictureBox3, i);
movement_correct(pictureBox4, i);
movement_correct(pictureBox5, i);
movement_correct(pictureBox6, i);
movement_correct(pictureBox7, i);
movement_correct(pictureBox8, i);
movement_correct(pictureBox9, i);
movement_correct(pictureBox10, i);
}
for (int i = 0; i < 5; i++)
{
movement_up(pictureBox1, i);
movement_up(pictureBox2, i);
movement_up(pictureBox3, i);
movement_up(pictureBox4, i);
movement_up(pictureBox5, i);
movement_up(pictureBox6, i);
movement_up(pictureBox7, i);
movement_up(pictureBox8, i);
movement_up(pictureBox9, i);
movement_up(pictureBox10, i);
}
}
}
}
有 10 个虚拟图片框。每当我点击按钮时,它们就会开始移动一点(有点像太空入侵者中的敌人)。
我正在尝试在 winforms 中制作流畅的动画。问题是动画没有我想要的那么流畅。在我的代码中,所有的盒子都没有同时移动,它们的移动有一点明显的差距。我想要的是流畅的运动。
我正在考虑多线程,但后来意识到这意味着每个对象都有一个线程。有没有其他方法(在winforms内)。
感谢您的帮助。
【问题讨论】:
-
标记这个 WinForms。怀疑多线程不会有帮助。你能去WPF吗?
-
每个控件移动休眠 25 毫秒将导致它以 4 fps 的速度移动控件。这会明显变慢。
-
@JamesB 每帧之间的 25 毫秒可以达到 40 fps。看起来有点错别字。但是,人眼perceives roughly 10-12 fps,所以任何高于此的都可以。
-
@WinCoder Winforms 不适用于游戏(带有动画)。使用不同的技术,有几种替代方案(您可能想研究 XNA,因为您使用的是 C#)。
-
@Msonic 但有 10 个控件,使每个完整循环 250 毫秒
标签: c# .net winforms multithreading animation