Простая анимация с использованием C # / Windows Forms

Мне нужно выбить быструю анимацию в C # / Windows Forms для отображения Хэллоуина. Просто некоторые 2D-фигуры движутся по сплошному фону. Поскольку это всего лишь быстрый одноразовый проект, я действительно не хочу устанавливать и изучать весь новый набор инструментов для этого. (DirectX dev kit, Silverlight, Flash и т. Д.). Мне также нужно установить это на нескольких компьютерах, чтобы все, что лежало за базовым .Net framework (2.0), было бы болью в заднице.

Для инструментов у меня есть VS2k8, 25-летний опыт разработки, тачка, плащ с холокостом и около 2 дней, чтобы выбить это. Я не делал анимацию с тех пор, как использовал ассемблер на Atari 130XE (hooray для перелистывания страницы и игровой / ракетной графики!)

Совет? Вот некоторые из вещей, которые я хотел бы знать:

  • Я могу нарисовать любой пустой виджет (например, панель), играя с обработчиком OnPaint, не так ли? Вот как я нарисовал пользовательский виджет. Есть ли лучшая техника, чем эта?
  • Есть ли способ перетаскивания страниц для такого рода вещей в Windows Forms? Я не ищу высокую частоту кадров, так же, как мало мерцание / рисование по мере необходимости.

Благодарю.

Post Mortem Edit … «парочка дней кодирования»

Ну, проект сделан. Ссылки, приведенные ниже, пригодились, хотя пара из них была 404. (Я бы хотел, чтобы SO позволял отмечать «правильный» более одного ответа). Самая большая проблема, которую мне пришлось преодолеть, – это мерцание и постоянная ошибка, когда я попытался использовать форму напрямую.

  • Использование события OnPaint для формы: плохая идея. У меня никогда не было на работу; много загадочных ошибок (переполнение стека, или ArgumentNullExceptions). Я закончил с помощью панели размером, чтобы заполнить форму, и это работало нормально.
  • Использование метода OnPaint в любом случае медленное. Где-то в Интернете я читал, что строительство PaintEventArgs было медленным, и они не шутили. Когда я отказался от этого, многие мерцали. Пропустите OnPaint / Invalidate () и просто нарисуйте его самостоятельно.
  • Установка всех параметров «двойной буферизации» в форме по-прежнему оставила некоторое мерцание, которое должно было быть исправлено. (И я нашел противоречивые документы, которые сказали «установить их на элементе управления» и «установить их в форме». Элементы управления Well не имеют метода .SetStyle ().) Я не тестировал без них, поэтому они могут быть что-то ( this форма):

      this.SetStyle(ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); 

Таким образом, рабочая лошадка кода выглядела как ( pf – панель управления):

  void PaintPlayField() { Bitmap bufl = new Bitmap(pf.Width, pf.Height); using (Graphics g = Graphics.FromImage(bufl)) { g.FillRectangle(Brushes.Black, new Rectangle(0, 0, pf.Width, pf.Height)); DrawItems(g); DrawMoreItems(g); pf.CreateGraphics().DrawImageUnscaled(bufl, 0, 0); } } 

И я просто вызвал PaintPlayField изнутри цикла Timer. Никаких мерцаний.

Установите таймер с нужной частотой кадров. На каждом таймере запускается внутреннее представление фигур на экране (ваша модель) на движение анимации, которое вы хотите достичь, затем вызовите Invalidate(true) . Внутри OnPaint просто нарисуйте модель на экране.

О да, и вы, вероятно, захотите включить Double Buffering (это похоже на автоматическое переключение страницы).

2d Game Primer

Анимация на основе таймера

Оба они дают хорошие примеры анимации. Код довольно прост. Я использовал их, когда мне нужно было сделать быструю анимацию для моего сына.

  • Почему частота кадров в WPF нерегулярна и не ограничена для мониторинга обновления?
  • Разработка Android Homescreen
  • Как сделать плавное rotation изображения в Android?
  • Как остановить анимацию (cancel () не работает)
  • Анимация для expandableListView
  • Анимированная иконка для ActionItem
  • В JavaFX как перемещать спрайт по экрану?
  • Разметка слайдов и слайдов с анимацией
  • Флеш анимации для Android
  • Как анимировать путь на canvasе - андроид
  • Как мне оживить View.setVisibility (GONE)
  • Interesting Posts

    Как изменить кодировку по умолчанию в NetBeans 8.0

    Ошибка в if / while (условие) {: отсутствует Значение, в котором требуется TRUE / FALSE

    Нужно простое шифрование файлов для неквалифицированных пользователей Mac и Windows

    Как написать код, который лучше всего использует кеш процессора для повышения производительности?

    Синхронизированный аудиовыход на нескольких компьютерах? VLC? Аппаратные решения?

    Как использовать HTML5, как использовать контентные поля в представлении формы?

    Как добавить пользователей на FTP-сайт в IIS Windows 7?

    Нераспознанный атрибут ‘targetFramework’. Обратите внимание, что имена атрибутов чувствительны к регистру

    Простой AJAX с примером JSP

    Как добавить текст к изображению?

    Как запустить интегрированный видеоадаптер вместе с графическим процессором в системе Ivy Bridge?

    Динамические имена таблиц в функции хранимой процедуры

    * .exe не является допустимым приложением win32

    Windows Phone 7 Browser – выключите серое затенение при нажатии ссылок

    Оптимальная форма набора данных HDF5 для строк чтения

    Давайте будем гением компьютера.