Witam,
Piszę program, który robi symulację poruszania się osób po pewnej strefie. Po dokonani obliczeń i symulacji chciałbym zrobic animację.
Mam w kolekcji zrobiony spis kolejnych kroków kazdej osoby i za pomoca Timera wskazuje kolejne pozycje listy. W danej pozycji rysowany jest osoba:
private void Start(object sender, EventArgs e)
{
TickZegara = 0;
Zegar = new Timer();
Zegar.Interval = (10);
Zegar.Tick += new EventHandler(zegar_Tick);
Zegar.Start();
}
void zegar_Tick(object sender, EventArgs e)
{
promienPickera = 10;
Pen pioro = new Pen(Color.Black);
pioro.Width = 1;
tlo = new Bitmap(Obiekty_Static.TłoStrefy);
g = Graphics.FromImage(tlo);
this.PanelRysunku.BackgroundImage = tlo;
for (int i = 0; i < Obiekty_Static.LiczbaPracownikow; i++) //po wszystkich pracownikach
{
SolidBrush KolorPickera = new SolidBrush(Tablice.TablicaPracownicy[i].Kolor);
if (KrokAnimacji[i] < Tablice.TablicaPracownicy[i].wspKolejnychKrokowDoAnimacji.Count)
{
Point lokalizacja = Tablice.TablicaPracownicy[i].wspKolejnychKrokowDoAnimacji[TickZegara];
Rysuj(KolorPickera, promienPickera, pioro, lokalizacja);
KrokAnimacji[i]+=szybkosc;
}
}
TickZegara += szybkosc; ;
}
private void Rysuj(SolidBrush Kolor, int promienPickera, Pen pioro, Point Lokalizacja)
{
g.FillRectangle(Kolor, Lokalizacja.X - promienPickera / 2, Lokalizacja.Y - promienPickera / 2, promienPickera, promienPickera);
g.DrawRectangle(new Pen(Color.Blue), Lokalizacja.X - promienPickera / 2, Lokalizacja.Y - promienPickera / 2, promienPickera, promienPickera);
}
U mnie na komputerze nie ma problemu, jednak na innym kompie (o dobrych parametrach - np. 4gb ram) wyskakuje mi błąd w trakcie rysowania kolejnych iteracji na panelu. Błąd w linii: Application.Run(new Form1());
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
w załączeniu zrzut błędu.
Ma może ktoś jakieś sugestie? Czy można jakoś usprawnić kod nie zwiększając interwału timera bo wówczas animacja jest bardzo klatkowa (toporna)? W końcu jest to tylko rysowanie na panelu tyle ze częste. Dodatkowo panel jest ustawiony na doublebuffered.
Będę wdzięczny za wszystkie sugestie...
Pozdrawiam
K.