C # WinForm Drawing - как очистить и перерисовать - PullRequest
2 голосов
/ 23 апреля 2010

Вот скриншот моей игры. Слева моя проблема, кажется, "старая ничья" все еще существует. Справа так и должно быть.

http://img682.imageshack.us/img682/1058/38995989.jpg

код чертежа

        Graphics g = e.Graphics;

        for (int i = 1; i < 27; i += 1)
        {
            for (int j = 0; j < 18; j += 1)
            {
                ZPoint zp = zpoints[i, j];

                if (zp != null)
                {
                    g.DrawImage(zp.sprite_index, new Point(zp.x, zp.y));

                    Image arrow;
                    if (zp.sprite_index == spr_green_zpoint)
                    {
                        arrow = spr_green_arrows[zp.image_index];
                    }
                    else if (zp.sprite_index == spr_red_zpoint)
                    {
                        arrow = spr_red_arrows[zp.image_index];
                    }
                    else
                    {
                        arrow = spr_grey_arrows[zp.image_index];
                    }

                    g.DrawImage(arrow, new Point(zp.x - 4, zp.y - 4));
                }
            }
        }

        if (latest_p1 != -1 && latest_p2 != -1)
        {
            ZPoint zp = zpoints[latest_p1, latest_p2];

            if (zp != null)
            {
                g.DrawImage(spr_focus, new Point(zp.x - 6, zp.y - 6));
            }
        }

Ответы [ 2 ]

6 голосов
/ 23 апреля 2010

В классе Control есть несколько методов, которые занимаются перерисовкой:

  • Invalidate - этот метод помечает определенную область элемента управления как недействительную и перерисовывает ее при следующей операции рисования
  • Update - Этот метод вызывает перерисовку любых недействительных областей
  • Refresh - Этот метод делает недействительной всю поверхность элемента управления и немедленно перерисовывает ее. Эквивалентно вызову Invalidate() и Update() в прямой последовательности.
0 голосов
/ 23 апреля 2010

Если ваша игра никогда не уступает операционной системе, она может не очень хорошо рисовать. Вот где работа рисования сделана. Если вы вставите вызов Invalidate () и "Thread.Sleep (0);" в ваш код, где вы хотите обновить экран, это может помочь.

...