Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/19: Рейтинг темы: голосов - 19, средняя оценка - 4.84
0 / 0 / 1
Регистрация: 08.02.2011
Сообщений: 7

Мерцание визуальных компонентов при анимации

13.05.2011, 19:53. Показов 3517. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я столкнулся с проблемой, когда попытался реализовать некое подобие анимации с помощью визуальных компонентов.

Сначала я использовал OvalShape (из VB PowerPacks) в форме круга, при этом интервал срабатывания таймера я изменял от 10 до 50 мс (наиболее приемлемо выглядит вариант 20мс). Компонент очень сильно мерцал при движении. Скорость движения (переменные ball.vx и ball.vy) имеют значения от 0,1 до 1.

Позже я попробовал разместить компонент OvalShape на панели (Panel) и двигать уже панель. Это избавило от мерцания, но при движении (особенно при движении вверх) крайняя сторона круга не прорисовывается (как на скриншоте, но это монтаж, я обрезал верхнюю часть чтобы проиллюстрировать проблему. Скрин бага сделать никак не получается).



Ниже приводится код обработчика события TmrMove.Tick и метода, производящего расчёт и установку нового значения ShpBall1.Left и ShpBall1.Top

Здесь ball - это структура, а ShpBall1 - это компонент: OvalShape или Panel в зависимости от способа.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 private void TmrMove_Tick(object sender, EventArgs e)
        {
            if (ChkSpdDin.Checked)
            {int s=1;
            s = (ball.vx > 0) ? 1 : -1;
                ball.vx = s*TrackSpeedX.Value/10.0;
            s = (ball.vy > 0) ? 1 : -1;
                ball.vy = s*TrackSpeedY.Value/10.0;
            }
 
            Movement(TmrMove.Interval);   
        }
 
private void Movement(int t)
        {
            int h, w;
            h = panel1.ClientSize.Height;
            w = panel1.ClientSize.Width;
 
            
            if ((ball.y > (h-ShpBall1.Height - 3)) | if (ball.y < 3))
                ball.vy = -ball.vy;
 
            if ((ball.x > (w-ShpBall1.ClientSize.Width -3)) | (ball.x < 3))
                ball.vx = -ball.vx;
            
            ball.x = (int)(ball.x + ball.vx * t);
            ball.y = (int)(ball.y + ball.vy * t);
 
            ShpBall1.Left = ball.x;
            ShpBall1.Top = ball.y;
 
        }
Собственно, очевидно я допустил какую-то кардинальную ошибку... очень прошу вас помочь.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.05.2011, 19:53
Ответы с готовыми решениями:

Мерцание при добавлении компонентов на форму
У меня на форме есть компонент Panel в которую я программно добавляю PictureBox-ы: PictureBox pb = new PictureBox(); pb.Image = ... ...

Подключение визуальных компонентов к проекту
Здравствуйте, уважаемые форумчане.Подскажите пожадуйство в одном очень простом вопросе, но который у меня не получается решить. Мне нужно...

Что лучше почитать о создании визуальных компонентов?
Доброго времени суток. Подскажите что лучьше почитать о создании визульных компонентов на С#. По гугловским ссылкам не могу связать...

9
 Аватар для Clandestin
20 / 20 / 9
Регистрация: 10.11.2010
Сообщений: 90
13.05.2011, 20:06
Попробуйте свойство формы DoubleBuffered установить в true.
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
13.05.2011, 20:08
Цитата Сообщение от TaurusBrown Посмотреть сообщение
Собственно, очевидно я допустил какую-то кардинальную ошибку...
+1. Юзай WPF, GDI+ не самое лучшее, что есть для рисования - хотя странно, что на таком простом примере такие артефакты. Буфферизацию юзаешь?
0
0 / 0 / 1
Регистрация: 08.02.2011
Сообщений: 7
13.05.2011, 20:15  [ТС]
Цитата Сообщение от freeba Посмотреть сообщение
+1. Юзай WPF, GDI+ не самое лучшее, что есть для рисования - хотя странно, что на таком простом примере такие артефакты. Буфферизацию юзаешь?
Ты имеешь ввиду что тот же код в WPF приложении будет прорисовывать лучше? или нет? Поясни пожалуйста.

И нет, я не юзаю буферизацию. Понятия не имею об том как её реализовать.

Добавлено через 3 минуты
Цитата Сообщение от Clandestin Посмотреть сообщение
Попробуйте свойство формы DoubleBuffered установить в true.
Попробовал. Не помогло.
0
87 / 86 / 13
Регистрация: 21.10.2010
Сообщений: 349
13.05.2011, 20:30
Цитата Сообщение от TaurusBrown Посмотреть сообщение
Ты имеешь ввиду что тот же код в WPF приложении будет прорисовывать лучше? или нет? Поясни пожалуйста.
Не тот же код. С помощью WPF ты можешь привязать к любому компоненту анимацию, какую только тебе захочется. Делается это с помощью XAML кода не много похож на HTML, но совсем разные вещи)

Или скачай себе Expression Blend, освой его и XAML код писать не придется, он сам тебе его напишет и анимация будет работать.
0
0 / 0 / 1
Регистрация: 08.02.2011
Сообщений: 7
13.05.2011, 20:37  [ТС]
Цитата Сообщение от Vangok Посмотреть сообщение
Не тот же код. С помощью WPF ты можешь привязать к любому компоненту анимацию, какую только тебе захочется. Делается это с помощью XAML кода не много похож на HTML, но совсем разные вещи)

Или скачай себе Expression Blend, освой его и XAML код писать не придется, он сам тебе его напишет и анимация будет работать.
Уже скачал и поставил - очень крутая вещь... но я только начинаю изучать C# и подумал что полезнее сначала попрактиковаться на "чистом" C#, без WPF, без XAML.

К слову о Expression Blend - кроме метода "тыкать и смотреть что получится" можешь порекомендовать какие-то способы его изучения? Может какие-то самоучители, онлайн-сервисы... что угодно. Точнее я имею ввиду разумеется изучение не Blend (хотя и его тоже), а в первую очередь WPF, XAML и .NET.
0
87 / 86 / 13
Регистрация: 21.10.2010
Сообщений: 349
13.05.2011, 20:43
Любая литература, но если ты только изучаешь C#, то не стоит браться за такую штуку как WPF.
На yootube достаточно много видео опосвященного Blend, в интернете куча инфы как создавать разные вещи на нем.

Добавлено через 1 минуту
Не берись сразу за сложные проекты. Освой азы, а остальное придет со временем.
0
0 / 0 / 1
Регистрация: 08.02.2011
Сообщений: 7
13.05.2011, 20:45  [ТС]
Цитата Сообщение от Vangok Посмотреть сообщение
Любая литература, но если ты только изучаешь C#, то не стоит браться за такую штуку как WPF.
На yootube достаточно много видео опосвященного Blend, в интернете куча инфы как создавать разные вещи на нем.

Не берись сразу за сложные проекты. Освой азы, а остальное придет со временем.
Я тоже так подумал, что не стоит сейчас браться за WPF.

Я и не пишу сложные проекты Но не helloworld с QuickSort'ом писать же)

В общем, спасибо)
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
13.05.2011, 21:14
Цитата Сообщение от TaurusBrown Посмотреть сообщение
И нет, я не юзаю буферизацию. Понятия не имею об том как её реализовать.
Загляни сюда, пунктик "Устранение мерцания". Но я по прежнему за WPF - визуализация, пусть даже начинающим написанная, уделает GDI+ написанный не мастером. Да и работать на порядок проще, после книги того-же Троелсена знаний хватит на простые приложения и среднюю анимацию в xaml.
0
0 / 0 / 1
Регистрация: 08.02.2011
Сообщений: 7
13.05.2011, 21:37  [ТС]
Цитата Сообщение от freeba Посмотреть сообщение
Загляни сюда, пунктик "Устранение мерцания". Но я по прежнему за WPF - визуализация, пусть даже начинающим написанная, уделает GDI+ написанный не мастером. Да и работать на порядок проще, после книги того-же Троелсена знаний хватит на простые приложения и среднюю анимацию в xaml.
Спасибо, это я и хотел услышать - автора книги. Буду пробовать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.05.2011, 21:37
Помогаю со студенческими работами здесь

Без использования визуальных компонентов вывести текст
Здравствуйте делаю калькулятор и задача состоит в том что нужно выводить текст без использования визуальных компонентов как это сделать?

Мерцание анимации текста
Всем привет, столкнулся с такой проблемой - мерцание анимации, а именно текста. Уже много чего перепробовал, можно увидеть в коде, но...

Какие возможности компонентов не рекомендуют изменять во время работы визуальных программ?
Какие возможности компонентов не рекомендуют изменять во время работы визуальной программы, таких как Visual Stuido WinForms/WPF/UWP ||...

Создание на главном окне визуальных компонентов (при помощи потока)
Нужно создать такую прогу Один подпроцесс создает на главном окне визуальные компоненты, а другой подпроцесс случайным образом удаляет...

Мерцание компонентов при скроллинге
Всем привет! Пишу на C++ Builder XE. Есть форма, на которой есть некоторое количество компонентов (около 50). Преимущественно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru